Я не к верному, если мой заголовок является правильным. То, что я делаю, пишет сценарий Python для автоматизации части моей записи кода. Таким образом, я анализирую через.h файл. но я хочу развернуть все макросы, прежде чем я запущу. таким образом, я хочу сделать вызов к оболочке к:
gcc -E myHeader.h
То, которое должно поместить сообщение, предварительно обработало версию myHeader.h к stdout. Теперь я хочу считать весь, который производит прямо в строку для последующей обработки. Я считал, что могу сделать это с popen, но я никогда не использовал объекты канала.
как я делаю это?
Функция os.popen
просто возвращает объект в виде файла. Вы можете использовать его так:
import os
process = os.popen('gcc -E myHeader.h')
preprocessed = process.read()
process.close()
Как говорили другие, вы должны использовать subprocess.Popen
. Он разработан как более безопасная версия os.popen
. В документации Python есть раздел , описывающий, как переключить .
Следует сравнить каждый байт массивов, можно создать простой цикл или использовать метод 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
.
вы должны использовать subprocess.Popen ()
есть множество примеров на SO