Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用os.system和subprocess.Popen_Python_Shell_Virtual Machine_Vmware Workstation - Fatal编程技术网

Python 使用os.system和subprocess.Popen

Python 使用os.system和subprocess.Popen,python,shell,virtual-machine,vmware-workstation,Python,Shell,Virtual Machine,Vmware Workstation,我一直在尝试编写一个python脚本来远程控制我的虚拟机。例如,我想在我的虚拟机上运行一个程序,并检查它是否正在运行。对于这一步,我尝试使用Os.system,它似乎正在工作,但为了更好地控制,我喜欢使用子流程,但不幸的是没有成功。我为os.system和子流程提供了如下代码: os.system("vmrun -gu root -gp mohsen77 runProgramInGuest F:\Client\Ubuntu10464bit.vmx usr/bin/tcpreplay --intf

我一直在尝试编写一个python脚本来远程控制我的虚拟机。例如,我想在我的虚拟机上运行一个程序,并检查它是否正在运行。对于这一步,我尝试使用Os.system,它似乎正在工作,但为了更好地控制,我喜欢使用子流程,但不幸的是没有成功。我为os.system和子流程提供了如下代码:

os.system("vmrun -gu root -gp mohsen77 runProgramInGuest F:\Client\Ubuntu10464bit.vmx usr/bin/tcpreplay --intf1=eth4 /home/srastega/output.pcap")
print('PID is:' + str(os.getpid()))

args = shlex.split("vmrun -gu root -gp mohsen77 runProgramInGuest F:\Client\Ubuntu10464bit.vmx /bin/ls -l")
tcpreplay = subprocess.Popen(args, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True)
out, err = tcpreplay.communicate()
print(out)
print('PID is:' + str(tcpreplay.pid))
对于第二段代码,我收到一个错误:

错误:无法打开虚拟机:F:\ClientUbuntu10464bit.vmx,虚拟机无法打开 e发现


双引号字符串中的反斜杠可能具有特殊含义,这可能导致它们消失。我不知道为什么这两个调用的工作方式不同,但请尝试将反斜杠加倍或改为正斜杠


(从评论中的讨论中获得答案。)

错误消息在
U
之前有一个缺失\项。一般来说,虽然我不知道它们的行为为何不同,但我对双引号字符串中的单反斜杠有点怀疑。我会担心那些被弄坏的。好评论!我发现shlex.split output没有考虑路径中的\s,因此如果我打印出参数,它将是:['vmrun'、'-gu'、'root'、'-gp'、'mohsen77'、'runProgramInGuest'、'F:ClientUbuntu10464bit.vmx'、'/bin/ls'、'-l'],这不是我们想要的。当我使用split时,我必须找到一个解决方案来保留这些\s。通过将行更改为:args=shlex.split(“vmrun-gu root-gp mohsen77 runProgramInGuest F:/Client/Ubuntu10464bit.vmx/bin/ls-l”)解决了这个问题