我有以下Python代碼之間進行通信:使用文件描述符過程
import pty
import subprocess
os=subprocess.os
from subprocess import PIPE
import time
import resource
pipe=subprocess.Popen(["cat"], stdin=PIPE, stdout=PIPE, stderr=PIPE, \
close_fds=True)
skip=[f.fileno() for f in (pipe.stdin, pipe.stdout, pipe.stderr)]
pid, child_fd = pty.fork()
if(pid==0):
max_fd=resource.getrlimit(resource.RLIMIT_NOFILE)[0]
fd=3
while fd<max_fd:
if(fd not in skip):
try:
os.close(fd)
except OSError:
pass
fd+=1
enviroment=os.environ.copy()
enviroment.update({"FD": str(pipe.stdin.fileno())})
os.execvpe("zsh", ["-i", "-s"], enviroment)
else:
os.write(child_fd, "echo a >&$FD\n")
time.sleep(1)
print pipe.stdout.read(2)
如何我把它改寫,以便它不會使用Popen
和cat
?我需要一種方法來傳遞在交互式shell中運行的shell函數中的數據,該函數不會與其他函數創建的數據混合(因此我不能使用stdout或stderr)。
爲什麼你不能直接''subprocess.Popen()'shell? – llasram 2010-09-22 15:30:16
@llasram,因爲我需要一個交互式shell來捕獲傳遞給完成內建compadd的參數。沒有tty - 沒有互動 - 沒有完成。 – ZyX 2010-09-22 18:33:21
我不是很追隨...你能提供一個具體的例子嗎? – llasram 2010-09-22 19:26:45