2 回答
TA贡献1852条经验 获得超1个赞
shell=True
将参数作为列表传递时不要使用。stdin.write
需要一个bytes
对象作为参数。您尝试连线str
。communicate()
写入输入到stdin
并返回的otput的元组stdout
和sterr
,并且它等待直到过程完成。您只能使用一次,尝试再次调用它将导致错误。您确定您要编写的行应该传递到stdin上的进程中吗?这不是您要尝试运行的命令吗?
TA贡献1775条经验 获得超8个赞
将命令参数作为参数传递,而不作为stdin传递
该命令可能直接从控制台读取用户名/密码,而无需使用子进程的stdin。在这种情况下,您可能需要
winpexpect
或SendKeys
模块。参见我对具有相应代码示例的类似问题的回答
这是一个示例,该示例如何使用参数启动子流程,传递一些输入并将合并的子流程的stdout / stderr写入文件:
#!/usr/bin/env python3
import os
from subprocess import Popen, PIPE, STDOUT
command = r'fileLoc\uploader.exe -i file.txt -d outputFolder'# use str on Windows
input_bytes = os.linesep.join(["username@email.com", "password"]).encode("ascii")
with open('command_output.txt', 'wb') as outfile:
with Popen(command, stdin=PIPE, stdout=outfile, stderr=STDOUT) as p:
p.communicate(input_bytes)
添加回答
举报