为Python子进程定制标准输入
我正在运行一个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)
哦,既然你提到要“引导正确的方向”,我觉得我应该给你推荐一些不错的阅读材料:
-