硬编码密码而不是提示输入
@hybris95 - 由于问题的范围发生了变化,而且你很积极回应,我会把你最初的回答标记为解决方案,但我发布了一个后续问题
我的Python脚本会以提升的用户身份执行另一个脚本。不幸的是,它在执行过程中会让我输入密码。
我该如何把密码写死在代码里,或者自动从其他地方读取密码?有没有什么方法可以在Python中实现?
import os
import sys
import win32com.shell.shell as sh
ASADMIN = '/user:DOMAIN\user'
os.system('"runas /user:DOMAIN\user "D:/Python27/python.exe myscript.py""')
sys.exit(0)
if sys.argv[-1] != ASADMIN:
script = os.path.abspath(sys.argv[0])
params = ''.join([ASADMIN] + ['D:\Python27\python.exe',script] + sys.argv[1:])
sh.ShellExecuteEx(lpVerb='runas',lpFile=sys.executable,lpParameters=params)
sys.exit(0)
更新后的代码,但仍然出现错误
import os
import sys, subprocess, socket, string
import wmi, win32api, win32con
import win32com.shell.shell as sh
command = 'runas /user:DOMAIN\username "D:/Python27/python.exe myscript.py"'
pst = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE)
pst.communicate("password123")
我遇到的错误
Attempting to start D:/Python27/python.exe script.py as user "DOMAIN\username" ...
RUNAS ERROR: Unable to run - D:/Python27/python.exe myscript.py
1326: Logon failure: unknown user name or bad password.
2 个回答
1
你可以使用 subprocess.Popen()
来创建一个子进程,然后用 Popen.communicate()
来给这个子进程提供输入(比如密码):
p = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE)
p.communicate(password)
1
因为RunAs这个工具没有提供不需要输入密码的选项。
所以你可以通过一个文件来传递密码。
比如说(在命令行里),我会这样做:
runas /user:DOMAIN\user "D:/Python27/python.exe myscript.py < password.txt
这里的password.txt文件里存放着我的密码。
补充一下:
你也可以直接把密码写在命令里,用管道符来传递:
echo "MyPassword" | runas /user:DOMAIN\user "D:/Python27/python.exe myscript.py