【问题标题】:Subprocess function skips input for password and exits program子进程函数跳过密码输入并退出程序
【发布时间】:2019-06-19 15:45:50
【问题描述】:

我正在调用 subprocess.run 来执行外部程序。但是程序需要管理员权限,我使用管理员运行程序,但是python控制台提示我输入密码,但不让我输入密码并退出程序。

我尝试过使用subprocess.popensubprocess.call,我也尝试过在没有管理权限的情况下运行该程序,但是 pycharm 会抛出一个操作需要提升错误。

def runExecutables():
    directory = r"C:\Users\Billy\Desktop\SURVEY_PROGRAM_WINDOWS_ENGLISH.exe"
    #subprocess.Popen(directory)

    subprocess.run(['runas', '/user:Administrator', directory])
    #prog.stdin.write(b'password')
    #prog.communicate()

我应该期待可执行文件运行,或者弹出一个提示要求输入密码,向我证明可执行文件确实正在运行。我只是得到一个 python 提示输入管理员密码,它不会等待我在完成过程之前输入密码。

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    我通过使用命令提示符而不是使用子进程来避免这个问题。

    def runExecutables():
         os.system(r"start C:\Users\Mastodon\Desktop\SURVEY_PROGRAM_WINDOWS_ENGLISH.exe")
    

    使用命令提示符可以缓解子进程可能造成的一些问题。我不清楚使用 subprocess 的优点是什么。

    【讨论】:

    • 看看hereheredocs 推荐使用子进程而不是os.system,解释原因。
    【解决方案2】:

    使用 Popen,您必须通过管道输入标准输入并刷新输入

    import subprocess
    
    p = subprocess.Popen(['runas', '/user:Administrator', 'calc.exe'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
    p.stdin.write(b'YourPassword\n')
    p.stdin.flush()
    stdout, stderr = p.communicate()
    print("-----------")
    print(stdout)
    print("-----------")
    print(stderr)
    

    【讨论】:

    • 那个解决方案,当我在 pycharm 中运行它时不执行程序。它仍然打印输入密码的提示,除了这次它在提示后吐出随机字符。
    • 必须先尝试从 cmd 提示符执行它。查看“runas /user:Administrator C:\Users\Billy\Desktop\SURVEY_PROGRAM_WINDOWS_ENGLISH.exe”在您的 cmd 提示符下是否正常工作
    • 是的,我在 cmd 中运行了程序,我执行了 runas,我得到了密码提示,并且可执行文件已运行
    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2018-12-04
    • 2014-10-29
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多