gpt4 book ai didi

python执行系统命令(windows)

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:18 24 4
gpt4 key购买 nike

所以我有这个 uber 脚本,它不断检查程序的系统路径 (openvpn)。当您安装 openvpn 时,它会将自己添加到系统路径中。我在控制台中运行我的脚本,在它运行和检查的同时,我安装了 openvpn。在那个控制台中,我的脚本永远不会在 sys 路径中找到 openvpn。如果我打开一个新控制台并运行相同的脚本,它会找到它。

知道如何让我的脚本不那么笨吗?

import os
import time
import subprocess

def cmd( command ):
return subprocess.check_output( command, shell = True )

def program_in_path( program ):
path = cmd( "path" ).split(";")
for p in path:
if "openvpn" in p.lower():
return True
return False


if __name__ == '__main__':
while True:
print program_in_path("openvpn")
time.sleep( 2 )

我假设它来自 shell = True 东西,但如果不是 pathWHERE openvpn/Q 我还能怎么找到它?在没有 sehll 的情况下运行我得到 WindowsError: [Error 2] The system cannot find the file specified

下面是用 ruby​​ 完成的 100% 运行的相同程序:

loop do
puts system( "WHERE openvpn /Q" )
sleep( 5 )
end

不幸的是,我的项目对 python 太深入了,现在无法切换语言。太糟糕了。

最佳答案

其实是因为你的程序启动的时候,已经配置好了环境。该环境的一部分是系统路径。当您启动子 shell 时,它会继承父进程的环境。

我不是 Windows 程序员,而且我现在没有可用于测试的 Windows 机器。但是根据该错误报告,如果您在脚本中 import nt 并在 while True 循环中使用 reload(nt) 它将下拉来自系统的环境的新副本。我不知道那是不是真的。这可能值得一试。

值得一提的是,您可以从 cmd 窗口中看到相同的行为,例如,打开一个命令窗口,将一个程序文件夹添加到系统路径,然后尝试从该程序文件夹中运行一个 exe现有的 cmd 窗口。它不会起作用——但打开一个新的 cmd 窗口,它会起作用。

您引用的错误报告是关于另一个问题的。那里概述的问题是,如果您在 Python 中加载其中一个系统 DLL 并使用 Windows 提供的特定功能来操纵您的环境,则 Python 不会反射(reflect)该更改。但是,如果您对 os.environ 进行更改,Python 会识别该更改。社区得出的结论是,记者使用的特定功能并不是获得预期结果的正确功能。

关于python执行系统命令(windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16577533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com