子过程功能会跳过密码输入并退出程序

时间:2019-01-25 19:14:23

标签: python subprocess

我正在调用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提示符,提示输入管理员密码,它并没有等待我输入密码,然后才完成该过程。

2 个答案:

答案 0 :(得分:0)

使用Popen,您必须管道输入stdin并刷新输入

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)

答案 1 :(得分:0)

我通过使用命令提示符而不是子进程来解决此问题,从而避免了该问题。

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

使用命令提示符可以缓解子流程可能带来的一些问题。我不清楚使用子过程的优点是什么。