@ 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.
答案 0 :(得分:1)
您可以使用subprocess.Popen()
生成子流程,Popen.communicate()
为其提供输入(密码):
p = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE)
p.communicate(password)
答案 1 :(得分:1)
由于RunAs没有提供任何不提示密码的信息 您可以通过文件传递密码。
例如(在shell中)我会这样做:
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