为Python子进程定制标准输入

3 投票
2 回答
11573 浏览
提问于 2025-04-16 04:14

我正在运行一个SSH进程,代码如下:

sshproc = subprocess.Popen([command], shell=True)
exit = os.waitpid(sshproc.pid, 0)[1]

这个方法可以正常工作,并且打开了一个可以互动的终端。根据subprocess的文档,sshproc使用的是脚本的sys.stdin

我的问题是:我怎么才能把这个子进程接收到的输入打印到错误输出(stderr)或者一个文件里呢?我正在创建一个日志记录的API,目前无法记录在这个SSH会话中执行的命令。

我不需要具体的答案,只想要一个方向上的提示。

谢谢大家!

编辑:我必须像上面那样启动进程,这样才能和我的用户进行互动的SSH会话。比如说,尽我所知,我不能使用communicate()

2 个回答

0

这是@pyfunc的答案的正确链接,http://pymotw.com/2/subprocess/。这个网站提供了很多有用的信息,关于“子进程”的内容,它可以让你调用其他很多程序或者bash命令,并且可以进行各种自定义的管道设置。

8
sshproc = subprocess.Popen([command],
                        shell=True,
                        stdin=subprocess.PIPE,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE,
                        )

stdout_value, stderr_value = sshproc.communicate('through stdin to stdout')
print repr(stdout_value)
print repr(stderr_value)

哦,既然你提到要“引导正确的方向”,我觉得我应该给你推荐一些不错的阅读材料:

-

撰写回答