Когда я должен использовать Popen () и когда я должен использовать call ()? - PullRequest
1 голос
/ 20 мая 2011

Предостережение: новинка в Python.

Желание услышать от профессионалов, которые на самом деле его используют:

Каковы основные различия между subprocess.Popen() и subprocess.call() и когда этоЛучше всего использовать каждый из них?

Если вы не хотите читать, почему я размышлял над этим вопросом или что бы сосредоточить ваш ответ, вы можете перестать читать сейчас.

Я былзадал этот вопрос, потому что я работаю над проблемой в скрипте, где я начал использовать subprocess.Popen(), в конце концов назвал системную паузу, а затем хотел удалить .exe, который создал системную паузу, но я заметил с Popen()кажется, что все команды выполняются вместе (удаление на .exe выполняется до закрытия exe-файла ..), хотя я попытался добавить communicate().

Вот фальшивый код для того, что я описываювыше:

subprocess.Popen(r'type pause.exe > c:\worker.exe', shell=True).communicate()
subprocess.Popen(r'c:\worker.exe', shell=True).communicate()
subprocess.Popen(r'del c:\worker.exe', shell=True).communicate()

1 Ответ

7 голосов
/ 20 мая 2011

subprocess.call (* popenargs, ** kwargs) Запустите команду с аргументами. Ждать Команда для завершения, а затем вернуть атрибут кода возврата.

Если вы создаете Popen объект, вы должны вызвать sp.wait() самостоятельно.

Если вы используете call, это сделано для вас.

...