Если вы хотите записать вывод в файл, вы можете использовать stdout -аргумент subprocess.call
.
Он принимает None
, subprocess.PIPE
, объект файла или дескриптора файла. Первый - по умолчанию, stdout наследуется от родителя (вашего скрипта). Второй позволяет передавать от одной команды / процесса к другой. Третий и четвертый - это то, что вы хотите, чтобы результат был записан в файл.
Вам нужно открыть файл с чем-то вроде open
и передать целое число дескриптора объекта или файла в call
:
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
Я предполагаю, что любой допустимый файловый объект будет работать, например сокет (вздох :)), но я никогда не пробовал.
Как отмечает marcog в комментариях, вы также можете перенаправить stderr, вы можете перенаправить его в то же место, что и stdout, с помощью stderr=subprocess.STDOUT
. Любое из вышеперечисленных значений также работает, вы можете перенаправить в разные места.
subprocess.call(["echo", "1", ">>", "t.txt"], shell=True)
должно работать.shlex.quote
, не передаете ли вы какие-либо потенциально грязные данные в подоболочку.with open("blah.txt","w") as f: subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
@SkurmedelПараметры
popen
можно использовать вcall
Так...
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput)
Затем вы можете делать то, что хотите
myoutput
(кстати, это должен быть файл).Кроме того, вы можете сделать что-то похожее на конвейерный вывод, подобный этому.
dmesg | grep hda
было бы:
p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) output = p2.communicate()[0]
На странице руководства по python есть много прекрасной и полезной информации .
источник
Вы также можете просто вызвать сценарий из терминала, выводя все в файл, если это поможет. Сюда:
$ /path/to/the/script.py > output.txt
Это перезапишет файл. Вы можете использовать
>>
для добавления к нему.Если вы хотите, чтобы ошибки также регистрировались в файле, используйте
&>>
или&>
.источник