我正在调用subprocess.run在外部执行外部程序。但是该程序需要管理权限,我使用管理员运行该程序,但是python控制台会提示我输入密码,但不允许我输入密码并退出程序。
我尝试使用subprocess.popen
和subprocess.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提示符,提示输入管理员密码,它并没有等待我输入密码,然后才完成该过程。
答案 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")
使用命令提示符可以缓解子流程可能带来的一些问题。我不清楚使用子过程的优点是什么。