2013-03-28 3 views
0

Я использую os.system() для запуска программы python и пытаюсь записать его вывод в файл. Это прекрасно работает.Убить дочерний процесс без убийства родителя

os.system("myprogram.py -arg1 -arg2 > outputfile.txt") 
#something here to kill/cleanup whatever is left from os.system() 
#read outputfile1.txt- this output file got all the data I needed from os.system() 

Проблема заключается в том, что myprogram.py вызывает другую программу питона, которая дает мне выход, мне нужно, но не я даже чистовой можно увидеть приглашение стать другим, как на картинке ниже

enter image description here

Есть ли способ убить дочерний процесс, когда я добираюсь до следующей строки моей программы Я пробовал использовать os.system ("quit()") и subprocess.popen ("quit()", shell = False), и это ничего не делало.

Я не могу использовать exit(), потому что это просто убивает python все вместе.

Btw это киоски

f=subprocess.Popen("myprogram.py -arg1 > outputfile.txt") and then 
f.communicate() #this just stalls because the child program does not end. 

ответ

1

программа, которая вызывается с помощью myprogram.py земли вы в питоне строке. Почему это происходит, мы не можем вам сказать, если вы не покажете нам код.

Использование модуля subprocess (который является более универсальным) предпочтительнее использовать os.system.

Но вы не используете подпроцесс правильно. Попробуйте так:

with open('outputfile.txt', 'w+') as outf: 
    rc = subprocess.call(['python', 'myprogram.py', '-arg1'], stdout=outf) 

with заявление будет закрывать файл после subprocess.call делается. Программу и ее аргументы следует указывать как список строк. Перенаправление осуществляется с использованием аргументов std....

После myprogram.py отделки, rc содержит код возврата.

Если вы хотите захватить вывод программы, вместо этого используйте subprocess.check_output().

+0

Я остаюсь с той же проблемой, хотя. Появляется приглашение python и даже rc.kill() или rc.terminate() ничего не делают. – Illusionist

+0

Можно ли отправить quit() ребенку, оставленному подпроцессом (подсказка python?) – Illusionist

+0

Если дочерний элемент выходит за подсказку python, в нем что-то не так. Попробуйте и _fix_, чтобы он не работал вокруг него. –

Смежные вопросы