чтение os.popen (команда) в строку

Я не к верному, если мой заголовок является правильным. То, что я делаю, пишет сценарий Python для автоматизации части моей записи кода. Таким образом, я анализирую через.h файл. но я хочу развернуть все макросы, прежде чем я запущу. таким образом, я хочу сделать вызов к оболочке к:

gcc -E myHeader.h

То, которое должно поместить сообщение, предварительно обработало версию myHeader.h к stdout. Теперь я хочу считать весь, который производит прямо в строку для последующей обработки. Я считал, что могу сделать это с popen, но я никогда не использовал объекты канала.

как я делаю это?

15
задан Lyndon White 26 February 2010 в 04:17
поделиться

3 ответа

Функция os.popen просто возвращает объект в виде файла. Вы можете использовать его так:

import os

process = os.popen('gcc -E myHeader.h')
preprocessed = process.read()
process.close()

Как говорили другие, вы должны использовать subprocess.Popen . Он разработан как более безопасная версия os.popen . В документации Python есть раздел , описывающий, как переключить .

26
ответ дан 1 December 2019 в 00:26
поделиться

Следует сравнить каждый байт массивов, можно создать простой цикл или использовать метод SequureEqual Linq Extension, если он доступен:

public static bool VerifyPassword(byte[] newPassword, byte[] storedPassword,
                                  byte[] storedSalt)
{
    byte[] password = CreateHashedPassword(newPassword, storedSalt);

    return password.SequenceEqual(storedPassword);
}
-121--3842462-

Метод System.Array.Equals проверяет только идентичность объекта, как и объект. Равняется.

Вы должны написать цикл и сравнить элементы самостоятельно.

-121--3842465-
import subprocess

p = subprocess.popen('gcc -E myHeader.h'.split(),
                     stdout=subprocess.PIPE)
preprocessed, _ = p.communicate()

Строка , предварительно обработанная , теперь имеет требуемый предварительно обработанный источник - и вы использовали "правильный" (современный) способ оболочки подпроцесса, а не старый не очень понравившийся os.popen .

16
ответ дан 1 December 2019 в 00:26
поделиться

вы должны использовать subprocess.Popen () есть множество примеров на SO

Как получить вывод из subprocess.Popen ( )

5
ответ дан 1 December 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: