我有一个自定义输入法,我有一个python模块与它进行通信。我试图用它控制shell,所以从远程设备上打印本地stdout的所有内容,从远程设备发送的所有内容都进入本地stdin,这样远程设备就可以控制给予程序的输入,就像程序中有一个input
函数,远程设备也可以回答它(比如在ssh中)。
我使用python子进程来控制stdin和stdout:
#! /usr/bin/python
from subprocess import Popen, PIPE
import thread
from mymodule import remote_read, remote_write
def talk2proc(dap):
while True:
try:
remote_write(dap.stdout.read())
incmd = remote_read()
dap.stdin.write(incmd)
except Exception as e:
print (e)
break
while True:
cmd = remote_read()
if cmd != 'quit':
p = Popen(['bash', '-c', '"%s"'%cmd], stdout=PIPE, stdin=PIPE, stderr=PIPE)
thread.start_new_thread(talk2proc, (p,))
p.wait()
else:
break
但它不起作用,我该怎么办?
P.S。 窗户有什么不同吗?
答案 0 :(得分:0)
我遇到了这个问题,我将其用于STDIN
from subprocess import call
call(['some_app', 'param'], STDIN=open("a.txt", "rb"))
A.TXT
:q
这用于git包装器,只要some_app
中有预期和用户输入的中断,就会进入数据行
答案 1 :(得分:0)
Windows有所不同。这条线在Windows中不起作用:
p = Popen(['bash', '-c', '"%s"'%cmd], stdout=PIPE, stdin=PIPE, stderr=PIPE)
因为'bash'
的等价物是'cmd.exe'
。