我试图在传入参数时从Python运行命令exe。我已经看了一些其他的问题,我的问题不同的原因是因为我首先要在传递一些参数的同时调用cmd exe程序,然后我必须等待10秒才能提示我一些用户名,然后一些密码。然后我想把这个输出管道输出到一个文件。
如果之前已经调用过程,那么有没有办法传递更多参数? 如何使cmd exe保持打开状态,因为只要我调用它,该过程就会消失。
谢谢
答案 0 :(得分:1)
看一下子流程沟通和管道示例。
答案 1 :(得分:1)
这是一个例子(首先我必须创建一个简单的python应用程序,花了一些时间来请求输入(在本例中为6秒),名为wait.py
wait.py
import time
print "Sample Waiting App (waiting 6 seconds)"
time.sleep(6)
name = raw_input("Enter a Name: ")
print "Hello", name
这是启动,等待,传递输入和读取输出的代码:
automator.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足够的时间来清除它的计时器),但正如@ J.F.Sebastian指出的那样,睡眠是不需要的。原因是调用'communic()'将阻塞,直到wait.py完成。另外因为wait.py是从stdin读取的,所以你可以在wait.py读取它之前填充stdin将内容。对于从stdin流中读取的任何应用程序都是如此。 'Jason\n'
将字符串p.communicate('Jason\n')[0]
发送到流程并打印输出。请注意stdout
显示wait.py打印语句的提示和输出,但不显示输入,这是因为输入时输入不在stdout
流中,它是呼应。