我正在尝试在传递参数时从 Python 运行命令 exe。我看过其他几个问题,我的问题不同的原因是因为我首先想在传递一些参数的同时调用一个 cmd exe 程序,然后我必须等待 10 秒让 exe 提示我一些用户名,然后是一些密码。然后我想将此输出输出到文件中。
那么如果之前已经调用过一个进程,有没有办法传递更多参数呢?如何使 cmd exe 保持打开状态,因为一旦我调用它,进程就会终止。
谢谢
看一下子进程通信和管道示例。
这是一个示例(首先我必须创建一个简单的 python 应用程序,它需要一些时间来请求输入(本示例中为 6 秒),名为 wait.py
等待.py
import time
print "Sample Waiting App (waiting 6 seconds)"
time.sleep(6)
name = raw_input("Enter a Name: ")
print "Hello", name
这是启动、等待、传递输入和读取输出的代码:
自动机.py
from subprocess import Popen, PIPE, STDOUT
p = Popen(['python', 'wait.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
print p.communicate('Jason\n')[0]
以下是正在发生的事情的分解:
subprocess.Popen()
创建一个进程(运行 python 解释器并将 wait.py 脚本作为参数传递)并分配给p
. 最初我让 automator.py 睡眠 10 秒(给 wait.py 足够的时间来清除它的计时器),但正如@JFSebastian 指出的那样,这种睡眠是不需要的。原因是对“communicate()”的调用将阻塞,直到 wait.py 完成。另外因为 wait.py 是从 stdin 读取的,你实际上可以在 wait.py 读取它之前填充 stdin 的内容。对于从标准输入流读取的任何应用程序都是如此。'Jason\n'
发送到进程p.communicate('Jason\n')[0]
并打印输出。请注意,stdout
它显示了 wait.py 打印语句的提示和输出,但不显示输入,这是因为输入时输入不在stdout
流中,它正在被回显。