0

好的,这里是 Python 新手。我要做的是打开一个程序(JLink Commander)并运行一系列命令来自动对 PCB 上的两个微控制器进行编程。到目前为止,我可以打开程序,但我无法通过带有标准输入的管道传递我的文本。

(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 - 它可以工作,但感觉就像使用一块石头,因为你不知道你把锤子放在哪里了。

4

1 回答 1

0

根据:[Python]:Popen。交流输入=无

请注意,如果要将数据发送到进程的标准输入,则需要使用stdin=PIPE.

代码.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
于 2018-06-19T20:25:01.280 回答