从python

时间:2017-05-04 07:20:07

标签: python

我有一个自定义输入法,我有一个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。 窗户有什么不同吗?

2 个答案:

答案 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'