【问题标题】:Calling command exe with python用python调用命令exe
【发布时间】:2013-06-25 15:36:28
【问题描述】:

我正在尝试在传递参数时从 Python 运行命令 exe。我看过其他几个问题,我的问题不同的原因是因为我首先想在传递一些参数的同时调用一个 cmd exe 程序,然后我必须等待 10 秒让 exe 提示我一些用户名,然后是一些密码。然后我想将此输出输出到文件中。

如果之前已经调用过一个进程,有没有办法传递更多参数? 如何使 cmd exe 保持打开状态,因为一旦我调用它,进程就会终止。

谢谢

【问题讨论】:

    标签: python pipe


    【解决方案1】:

    看看子进程通信和管道示例。

    【讨论】:

    • 特别是subprocess.Popen()
    【解决方案2】:

    这是一个示例(首先我必须创建一个简单的 python 应用程序,它需要一些时间来请求输入(本示例中为 6 秒),名为 wait.py

    等待.py

    import time
    
    print "Sample Waiting App (waiting 6 seconds)"
    time.sleep(6)
    name = raw_input("Enter a Name: ")
    print "Hello", name
    

    这里是启动、等待、传递输入和读取输出的代码:

    automator.py

    from subprocess import Popen, PIPE, STDOUT
    
    p = Popen(['python', 'wait.py'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
    print p.communicate('Jason\n')[0]
    

    这里是正在发生的事情的分解:

    1. subprocess.Popen() 创建一个进程(运行 python 解释器并将 wait.py 脚本作为参数传递)并分配给 p最初我让 automator.py 睡眠 10 秒(给 wait.py 足够的时间来清除它的计时器),但正如 @J.F.Sebastian 指出的那样,这种睡眠是不需要的。原因是对“communicate()”的调用将阻塞,直到 wait.py 完成。另外因为 wait.py 是从 stdin 读取的,你实际上可以在 wait.py 读取它之前填充 stdin 的内容。对于从标准输入流读取的任何应用程序都是如此。
    2. 然后字符串'Jason\n'通过p.communicate('Jason\n')[0]发送到进程并打印输出。请注意,stdout 显示的是 wait.py 打印语句的提示和输出,而不是输入,这是因为当您键入时输入不在 stdout 流中,它正在被回显。李>

    【讨论】:

    • 1.无需在此处同时使用.write().communicate()。将两者结合起来:print p.communicate(b"Jason")[0],p.stdin.close()communicate() 内部自动调用)2. time.sleep(10) 是不必要的。
    • 感谢您的帮助,我已经更新了我的答案(并删除了很多不需要的解释。)
    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    相关资源
    最近更新 更多