【发布时间】:2023-03-06 11:16:01
【问题描述】:
我在使用 subprocess.call() 和 psexec 执行远程进程时遇到问题。我正在使用以下语法通过subprocess.call() 远程执行进程:
def execute(hosts):
''' Using psexec, execute the script on the list of hosts '''
successes = []
wd = r'c:\\'
file = r'c:\\script.exe'
for host in hosts:
res = subprocess.call(shlex.split(r'psexec \\%s -e -s -d -w %s %s ' % (host,wd,file)), stdin=None, stdout=None, stderr=None)
if res == 0:
successes.append(host)
else:
logging.warning("Error executing script on host %s with error code %d" % (host, res))
print shlex.split(r'psexec \\%s -e -s -d -w %s %s ' % (hosts[0],wd,file))
return successes
如您所见,作为故障排除的一部分,我正在打印shlex.split() 输出以确保它是我想要的。此打印语句给出:
['psexec', '\\HOSTNAME', '-e', '-s', '-d', '-w', 'c:\\', 'c:\\script.exe']
这是我所期望的。不幸的是,当我运行它时,我收到一条错误消息:
PsExec could not start \GN-WRK-02:
The system cannot find the file specified.
在此之后,我使用程序运行时应使用的确切语法运行 psexec 命令(根据shlex.split() 输出判断),它运行良好。我的语法是:
psexec \\HOSTNAME -e -s -d -w c:\\ c:\\script.exe
任何想法为什么这不起作用?如果重要,则通过多处理的map() 函数在两个或三个主机列表上调用执行函数。
任何帮助都会很棒!谢谢!
【问题讨论】:
标签: python subprocess psexec