使用python在“终端模式”下启动Programm并添加命令

时间:2019-03-26 16:49:15

标签: python subprocess

我使用子进程模块在“终端模式”下通过在可执行文件之后添加标志来启动程序:

subprocess.call(nuke + " -t ")

这导致处于终端模式,因此以下所有命令都在programm的上下文中(我想这是programms python解释器)。

Nuke 11.1v6, 64 bit, built Sep  8 2018. Copyright (c) 2018 The Foundry Visionmongers Ltd.  All Rights Reserved. Licence expires on: 2020/3/15
>>>

我如何继续从启动终端模式的python脚本中将命令推入解释器? 您将如何从脚本中退出该程序解释器?

编辑:

nuketerminal = subprocess.Popen(nuke + " -t " + createScript)
nuketerminal.kill()

在加载python解释器和执行脚本之前终止过程吗,关于如何优雅地解决这个问题的任何想法都可以立即进行?

1 个答案:

答案 0 :(得分:1)

from subprocess import Popen, PIPE

p = subprocess.Popen([nuke, "-t"], stdin=PIPE, stdout=PIPE) # opens a subprocess
p.stdin.write('a line\n') # writes something to stdin
line = p.stdout.readline() # reads something from the subprocess stdout

不同步读写可能会导致死锁,例如当您的主流程和子流程都将等待输入时。

您可以等待子进程结束:

return_code = p.wait() # waits for the process to end and returns the return code
# or
stdoutdata, stderrdata = p.communicate("input") # sends input and waits for the subprocess to end, returning a tuple (stdoutdata, stderrdata).

或者您可以通过以下方式结束子流程:

p.kill()