子进程函数跳过密码输入并退出程序



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

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

def runExecutables():
    directory = r"C:UsersBillyDesktopSURVEY_PROGRAM_WINDOWS_ENGLISH.exe"
    #subprocess.Popen(directory)
    subprocess.run(['runas', '/user:Administrator', directory])
    #prog.stdin.write(b'password')
    #prog.communicate()

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

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

import subprocess
p = subprocess.Popen(['runas', '/user:Administrator', 'calc.exe'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
p.stdin.write(b'YourPasswordn')
p.stdin.flush()
stdout, stderr = p.communicate()
print("-----------")
print(stdout)
print("-----------")
print(stderr)
我通过使用

命令提示符而不是使用子进程来处理它来避免这个问题。

def runExecutables():
     os.system(r"start C:UsersMastodonDesktopSURVEY_PROGRAM_WINDOWS_ENGLISH.exe")

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

最新更新