我想调用一个exe文件,并且已经输入了参数/输入数据。
cmd = dir_path + 'file.exe do something test'
p = Popen(cmd, shell=True, stdout=PIPE, stderr=STDOUT)
这已经很好了。如果您使用exe文件执行此操作,则按Enter键以执行下一步,即输入您的用户名。然后是密码等。现在我不知道如何将这个实现到我的脚本中,这些步骤都是我的脚本完成的。基本上我不知道如何使用python进行ENTER步骤。感谢任何帮助。
更新
现在尝试了两种方式(在这个问题中提到的所有方法或者stackoverflow上的其他方法)。
方式1>
p = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE, universal_newlines=True)
# cmd represents the path of the exe file
p.stdin.write(username+"\n")
p.stdin.write(password+"\n")
p.sdin.close()
方式2
p = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE, universal_newlines=True)
out,err = p.communicate("\n".join([username,password,"\n"]))
# last \n should terminate the exe file and communicate should wait for the process to exit
两种方式都在一行中呈现相同的输出:
通常我希望它会是:用户名:密码:
用户名:"用户编写的用户名+ \ n"
写入
密码:"密码由进程+ \ n"
应用程序在windows7上运行(必须),exe文件在命令行中运行。
因此,exe可能不支持 way1 和 way2 ,因此不可能通过子进程编写它或者我犯了一个重大错误?!
再次感谢您的帮助。
答案 0 :(得分:3)
你几乎就在那里!
您可以执行以下操作:
import subprocess
p = subprocess.Popen(cmd, stdin=subprocess.PIPE, shell=True)
p.communicate(input='\r')
如果有任何问题,您可能需要使用\ n而不是\ r \ n。 \ r \ n是回车符,\ n是换行符。