Python os.sytem(';exit';)在我的代码中无法正常工作

Python os.sytem(';exit';)在我的代码中无法正常工作,python,operating-system,Python,Operating System,我正在尝试安装node.js,然后使用appium-v import os,subprocess os.system('node.msi') os.system('exit') os.system('appium -v') node.msi是我计算机上的一个节点文件。当我通过cmd执行此操作时,appium-v如果我在新cmd中执行此操作,则会起作用,但如果我继续使用相同的cmd,则不会起作用。所以我希望退出后,我的代码应该能正常工作。有人能指出我在这里做错了什么吗。很可能,node.msi的

我正在尝试安装node.js,然后使用
appium-v

import os,subprocess
os.system('node.msi')
os.system('exit')
os.system('appium -v')

node.msi
是我计算机上的一个节点文件。当我通过cmd执行此操作时,
appium-v
如果我在新cmd中执行此操作,则会起作用,但如果我继续使用相同的cmd,则不会起作用。所以我希望退出后,我的代码应该能正常工作。有人能指出我在这里做错了什么吗。

很可能,node.msi的安装修改了系统的
路径
变量。在运行的Python进程中,此更改不可见

如果知道节点安装的路径,可以在调用中显式指定它,例如

subprocess.run([r'C:\node\bin\apium.exe', '-v'])

我假设您正在运行Windows。当控制台启动时,它从注册表读取其环境。这就解释了为什么在打开第二个cmd控制台时它会工作

这意味着您必须要求Python在新控制台(而不仅仅是新的
cmd.exe
shell)中启动命令
appium-v

可以通过
os.system
使用
start

os.system("start /W appium -v")
或者取决于什么是真正的应用程序:

os.system("start /W cmd /c appium -v")
您还可以直接使用子流程模块(它提供的配置比操作系统更多)

根据appium是什么,以下内容就足够了:

p = subprocess.Popen("appium -v", creationflags=subprocess.CREATE_NEW_CONSOLE)
p.wait()

每个
system
调用都会生成一个新的
cmd.exe
,因此执行
system('exit')
是毫无意义的。那么,如果我在新cmd中手动编写'appium-v',它怎么会工作呢?但并非如此,因为shell主动监视用于初始化环境变量并相应更新其环境变量的注册表项,而任何其他进程只保留启动时获得的内容。您可以从Python脚本生成所需的所有进程,但其环境将保持不变。appium检查需要安装node.msi的appium版本。但是,安装node没有给我任何appium.exe文件。那么,appium的路径是什么?它是您路径的一部分吗?appium没有在环境变量中设置任何路径。那么,appium exe的路径是什么?它仍然不起作用。我甚至尝试使用完整的路径。我想指出,如果我使用以前的cmd打开新的cmd并编写appium-v,它仍然不起作用。为了让它成为word,我需要从头开始重新打开cmd
p = subprocess.Popen("appium -v", creationflags=subprocess.CREATE_NEW_CONSOLE)
p.wait()