好的,这里是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 -它可以工作,但是感觉就像在用一块岩石,因为您不知道将锤子放在哪里。
答案 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()
注释:
输出:
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