我试图通过命令行使用Python与另一个程序进行交互.我遇到的主要问题是具有多个后续提示的特定呼叫.最初,命令行调用询问项目的名称,然后继续询问我是否要查看项目的任何子文件夹.我需要按顺序回答每一个的y/n,遗憾的是,每个y或n的答案都不是y或n.另外,如果不阅读个别提示,我无法知道问题的答案,因此我无法一次性发送"y"或"n"块.
这是命令行调用:
si viewproject
输入命令后,命令行会提示:
输入项目名称:
一个示例响应是:
输入项目名称:c:/test.pj
进入项目后,它会提示以下内容:
你想进入子项目test_subprj.pj吗?[ynYN](n)的
在这一点上,我需要用ay或n来响应,这取决于我是否需要该子项目.同样,对这个问题的回答取决于子项目.我需要能够在此提示中读取子项目,以便用'y'或'n'来响应它
目前我需要分别手动输入项目以及y和n中的每一个.我的目标是使用Python自动执行此过程.
有没有办法自动响应这些命令行提示?
project_path = "c:/test.pj"
with Popen(["si", "viewproject", "--project=" + project_path],
stdin=PIPE, stdout=PIPE, universal_newlines=True) as p:
for line in p.stdout:
if line.startswith("Do you want"):
answer = 'n'
else:
continue # skip it
print(answer, file=p.stdin) # provide answer
p.stdin.flush()
Run Code Online (Sandbox Code Playgroud)
使用Popen语句后,此方法挂起.它永远不会出错,但它永远不会进入或退出for语句而永远不会完成.目前我默认所有"n"的答案,但稍后将用逻辑替换.
import re
import sys
from functools import partial
import winpexpect
project_path = "c:/test.pj"
p = winpexpect.winspawn('si viewproject --project=' + project_path)
p.logfile = sys.stdout
patterns = [re.compile('ynYN'), winpexpect.EOF] …Run Code Online (Sandbox Code Playgroud) 我是批处理文件的新手,并且一直在修改简单的命令.我已经想出如何将文本移动到另一个文件,找到一行等,但我希望能够在已有的文本文件中添加几行文本.这是我到目前为止:
@ECHO OFF
CD C:\Documents and Settings\SLZ1FH\Desktop\New Folder
FOR /F "tokens=*" %%A IN (Examples.txt) DO (
ECHO %%A
IF %%A=="Ex3 3"(
TYPE Line_to_add.txt >> Examples.txt
)
)
Run Code Online (Sandbox Code Playgroud)
如果Examples.txt包含:
和Line_to_add.txt包含:
我希望输出为:
tia :)
@ECHO OFF
FOR /F "tokens=*" %%A IN (Examples.txt) DO (
ECHO %%A
IF "%%A" EQU "Ex3" (
TYPE Line_to_add.txt
)
) >> temp.txt …Run Code Online (Sandbox Code Playgroud)