我正在调用subprocess.run来执行外部程序。但是该程序需要管理权限,我使用管理员运行该程序,但 python 控制台提示我输入密码,但不让我输入密码并退出程序。
我尝试使用subprocess.popen
和subprocess.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")
使用命令提示符可以缓解子进程可能造成的一些问题。我不清楚使用子流程的优势是什么。