为了账号安全,请及时绑定邮箱和手机立即绑定

无法在子进程中写入标准输入

无法在子进程中写入标准输入

阿波罗的战车 2021-03-29 12:11:55
我无法将命令传递给python 3.2.5中的stdin。我有以下2个尝试也接近:这个问题是一个的延续前面的问题。from subprocess import Popen, PIPE, STDOUTimport timep = Popen([r'fileLoc/uploader.exe'],shell = True, stdout=PIPE, stdin=PIPE, stderr=STDOUT)p.stdin.write('uploader -i file.txt -d outputFolder\n')print (p.communicate()[0])p.stdin.close()当我尝试IDLE解释器中的代码时,我还得到了返回给我的数字,例如96、0、85,以及诸如 print (p.communicate()[0])Traceback (most recent call last):  File "<pyshell#132>", line 1, in <module>    p.communicate()[0]  File "C:\Python32\lib\subprocess.py", line 832, in communicate    return self._communicate(input)  File "C:\Python32\lib\subprocess.py", line 1060, in _communicate    self.stdin.close()IOError: [Errno 22] Invalid argument我也用过:from subprocess import Popen, PIPE, STDOUT    import time    p = Popen([r'fileLoc/uploader.exe'],shell = True, stdout=PIPE, stdin=PIPE, stderr=STDOUT)    p.communicate(input= bytes(r'uploader -i file.txt -d outputFolder\n','UTF-8'))[0]    print (p.communicate()[0])    p.stdin.close()但没有运气。
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

  • shell=True将参数作为列表传递时不要使用。

  • stdin.write需要一个bytes对象作为参数。您尝试连线str

  • communicate()写入输入到stdin并返回的otput的元组stdoutsterr,并且它等待直到过程完成。您只能使用一次,尝试再次调用它将导致错误。

  • 您确定您要编写的行应该传递到stdin上的进程中吗?这不是您要尝试运行的命令吗?


查看完整回答
反对 回复 2021-04-06
?
www说

TA贡献1775条经验 获得超8个赞

  1. 将命令参数作为参数传递,而不作为stdin传递

  2. 该命令可能直接从控制台读取用户名/密码,而无需使用子进程的stdin。在这种情况下,您可能需要winpexpectSendKeys模块。参见我对具有相应代码示例的类似问题的回答

这是一个示例,该示例如何使用参数启动子流程,传递一些输入并将合并的子流程的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)


查看完整回答
反对 回复 2021-04-06
  • 2 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信