您好我有这样的问题。我需要通过子进程登录。所以我想创建一个输入管道并为它们写入登录名和密码。所以我尝试做这样的事情:
sp = subprocess.Popen([cmd],stdout=subprocess.PIPE, stdin=subprocess.PIPE)
i, o = sp.communicate()
在第一个字符串后,我有这样的错误tcgetattr: Inappropriate ioctl for device
。我没有o
的无价值。在这种情况下,如何将smth写入管道。谢谢你的帮助。
答案 0 :(得分:0)
来自subprocess.communicate(input)
docs:
可选的输入参数应该是要发送给子级的数据 处理 ...
请注意,如果要将数据发送到进程的stdin,则需要执行此操作 使用stdin = PIPE创建Popen对象。同样,得到任何东西 除了结果元组中的None之外,你需要给stdout = PIPE 和/或stderr = PIPE。
即,要将输入传递给子进程,请指定input
参数;要获取非None
o
值,您必须指定stderr=PIPE
。
在许多情况下,密码提示和密码本身不会从管道写入/读取,而是直接从/从终端读取,即,您可能需要使用伪tty来传递密码,除非该命令允许设置接受密码的选项通过stdin。您可以使用pexpect
使用pty
与子流程进行交互。请参阅 Why not just use a pipe (popen())?