我尝试使用子进程popen,os.spawn来运行一个进程,但似乎需要一个伪终端。
import pty
(master, slave) = pty.openpty()
os.write(master, "ls -l")应该将"ls -l“发送给从tty...我尝试读取响应os.read(master,1024),但什么都没有。
编辑:
我还尝试创建pty,然后在子进程中打开调用--仍然不起作用。
import pty
import subprocess
(master, slave) = os.openpty()
p = subprocess.Popen("ls", close_fds=True, shell=slave, stdin=slave, stdout=slave)类似的:
Send command and exit using python pty pseudo terminal process
How do *nix pseudo-terminals work ? What's the master/slave channel?
发布于 2014-01-30 06:56:19
使用pty.spawn而不是os.spawn。下面是一个函数,它在单独的pty中运行命令,并将其输出作为字符串返回:
import os
import pty
def inpty(argv):
output = []
def reader(fd):
c = os.read(fd, 1024)
while c:
output.append(c)
c = os.read(fd, 1024)
pty.spawn(argv, master_read=reader)
return ''.join(output)
print "Command output: " + inpty(["ls", "-l"])https://stackoverflow.com/questions/21442360
复制相似问题