Python 2.7 stdin没有将文本传递到管道

时间:2018-06-19 19:34:52

标签: python python-2.7 subprocess popen

好的,这里是Python新手。我想要做的是打开一个程序(JLink Commander)并运行一系列命令以自动化PCB上两个微控制器的编程。到目前为止,我已经可以打开该程序了,但是我无法使用stdin通过管道传递文本。

(Python 2.7,Windows 7。)

我可以使用以下方式打开程序:

proc = subprocess.Popen([r'C:\Program File 
    (x86)\SEGGER\JLink_V632c\jlink.exe'])

但是我尝试将其制成管道,这只会使孩子立即抓住并关闭:

proc = subprocess.Popen([r'C:\Program File 
    (x86)\SEGGER\JLink_V632c\jlink.exe'], stdout=subprocess.PIPE, 
    stdin=subprocess.PIPE)

更大的代码图片:

import os, subprocess, time

proc = subprocess.Popen([r'C:\Program File 
    (x86)\SEGGER\JLink_V632c\jlink.exe'])
time.sleep(1)
proc.stdin("power on")
proc.stdin.end()

(延迟只是给JLink时间打开,因为这最初会引起问题。)

我认为我在这里完全缺少一些基本知识。我可以做一个变通方法,并使用pyautogui -它可以工作,但是感觉就像在用一块岩石,因为您不知道将锤子放在哪里。

1 个答案:

答案 0 :(得分:0)

根据:[Python]: Popen.communicate(input=None)

  

如果要向进程的stdin发送数据,则需要使用stdin=PIPE创建Popen对象。

code.py

import sys
import subprocess
import time


def main():
    proc = subprocess.Popen([sys.executable, "-c", "x = raw_input('Dummy prompt: ');print('\\nYou entered: {:s}'.format(x))"], stdin=subprocess.PIPE)
    time.sleep(0.5)
    proc.communicate(input="Input text")


if __name__ == "__main__":
    print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
    main()

注释

  • 作为一种解决方法,我正在启动一个新的 python.exe 进程,该脚本具有以下参数作为脚本:
    • 等待用户输入
    • 打印(上方)用户输入

输出

e:\Work\Dev\StackOverflow\q050935734>python code.py
Python 2.7.10 (default, Mar  8 2016, 15:02:46) [MSC v.1600 64 bit (AMD64)] on win32

Dummy prompt:
You entered: Input text