在python中向子进程传递运行时参数

2024-05-14 00:44:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为应用程序.exe它接受1个参数并开始执行。而应用程序.exe正在执行,它将提示我进行确认,例如--“是否确实要继续?”我得说是/不是

现在我用python编写了一个程序应用程序.exe,提供1个输入参数。但是我无法提供应用程序.exe使用“是/否”选项(是否确定要继续?)通过我的下面是脚本是我的节目。在

proc=Popen(outlines, shell=True, stdin=PIPE, stdout=PIPE)
#Outlines is the command which contains 1 input parameter.
proc.communicate(input='n\n')[0]
#I saw this in python documentation.But it is not working.

让我知道我缺少什么。在


Tags: 程序脚本true应用程序input参数is选项
1条回答
网友
1楼 · 发布于 2024-05-14 00:44:06
proc = Popen(outlines, shell=True, stdin=PIPE, stdout=PIPE)
stdOut = ''
answered = False
while proc.Poll() is None:
    stdOut += proc.stdout.read()
    if answered is False and 'sure you want to continue' in stdOut:
        proc.stdin.write('n\n')
        proc.stdin.flush()
        answered = True # Not the most beautiful way to solve it, but chuck it.. it works.
proc.stdout.close()

像往常一样,有人会对此发表评论,所以我会马上说出来。在

  1. 如果PIPEstdout或stderr,则需要从缓冲区读取,否则缓冲区可能已满,从而意外挂起应用程序。在这种情况下,您无论如何都需要检查输出中的“您确定…”以便它自己解决问题,但请记住这一点。

  2. 另一件要注意的事情是,由于许多原因,使用shell=True是不好和/或危险的。我从来没有对它有过异议,但事实上每个人都喜欢到处乱扔,我相信总有一天会有人向我和你解释的。如果你感兴趣的话,你也可以用谷歌搜索。

  3. 如果使用while proc.Poll() == None:,如果函数返回0,则可能会出现问题,因此请使用is进行比较,以确保以正确的状态退出循环。

  4. 不要忘记关闭proc.stdout,如果您调试应用程序,并且在短时间内启动了许多会话,而此时没有足够的文件句柄可以打开另一个stdout(因为各种原因,它被视为文件句柄)。

由于.read()显然会在没有要读取的数据的情况下挂起应用程序,因此您必须轮询对象并询问是否有要获取的输入。 如果您使用的是Linux,那么可以使用select来完成此操作,在Windows上,您可以使用sort线程来检查和报告数据。在

在你回答了\n之后,让你暂时继续使用的廉价版本是忽略stdout,即使这不是真正推荐的。在

^{pr2}$

再说一次,从长远来看,我不会宽恕你的。但它可能会让你知道为什么会发生这种情况,也可以让你继续你的项目,这样你就不会在一个细节上纠缠太久。在

相关问题 更多 >