gpt4 book ai didi

python - 在 Windows 上从 Python 执行 bash 脚本

转载 作者:行者123 更新时间:2023-11-30 22:43:52 25 4
gpt4 key购买 nike

我正在尝试编写一个 python 脚本来执行 Windows 计算机上的 bash 脚本。到目前为止,我一直在使用 Cygwin 终端,因此执行 bash 脚本 RunModels.scr 就像 ./RunModels.scr 一样简单。 。现在我希望能够利用subprocess Python 的,但由于 Windows 没有处理 bash 的内置功能,我不知道该怎么做。

我正在尝试模仿./RunModels.scr < validationInput > validationOutput

我最初写的是:

os.chdir(atm)
vin = open("validationInput", 'r')
vout = open("validationOutput", 'w')
subprocess.call(['./RunModels.scr'], stdin=vin, stdout=vout, shell=True)
vin.close()
vout.close()
os.chdir(home)

但是在花了一段时间试图找出我的访问被拒绝的原因后,我意识到我的问题不是文件权限,而是我试图在 Windows 上执行 bash 文件的事实。有人可以解释一下如何使用 python 脚本在 Windows 上执行带有定向输入/输出的 bash 脚本吗?

编辑(后续问题):

感谢您的回复,我需要 bash.exe 的完整路径作为第一个参数。然而现在,来自 RunModels.scr 中的命令行调用在 python 输出中返回为 command not found 。例如,ls , cp , make 。对此有什么建议吗?

跟进#2:我将我的通话更新为:

subprocess.call(['C:\\cygwin64\\bin\\bash.exe', '-l', 'RunModels.scr'], stdin=vin, stdout=vout, cwd='C:\\path\\dir_where_RunModels\\')

我现在得到的错误是/usr/bin/bash: RunModels.scr: No such file or directory 。使用 cwd 似乎对此错误没有任何影响,无论哪种方式子进程都会在 /usr/bin/bash 中查找。对于 RunModels.scr

self 回答我需要在调用中指定 RunModels.scr 的路径以及使用 cwd .

subprocess.call(['C:\\cygwin64\\bin\\bash.exe', '-l', 'C:\\path\\dir_where_RunModels\\RunModels.scr'], stdin=vin, stdout=vout, cwd='C:\\path\\dir_where_RunModels\\')

但是另一个问题...

无论指定 cwdRunModels.scr 执行的命令抛出错误,就像 RunModels.scr位于错误的目录中。脚本执行,但是 cpcd抛出错误no such file or directory 。如果我导航到 RunModels.scr是通过命令行并以老式方式执行它,我不会收到这些错误。

最佳答案

Python 3.4 及更低版本

只需输入 bash.exe在您的subprocess.call列表中排名第一论据。您可以删除shell=True ,在本例中没有必要。

subprocess.call(['C:\\cygwin64\\bin\\bash.exe', '-l', 'RunModels.scr'], 
stdin=vin, stdout=vout,
cwd='C:\\path\\dir_where_RunModels\\')

根据 bash 的安装方式(是否在 PATH 中),您可能必须使用 bash 可执行文件的完整路径。

Python 3.5 及以上版本

subprocess.call()已有效替换为 subprocess.run() .

subprocess.run(['C:\\cygwin64\\bin\\bash.exe', '-l', 'RunModels.scr'], 
stdin=vin, stdout=vout,
cwd='C:\\path\\dir_where_RunModels\\')

编辑:

关于第二个问题,您可能需要添加 -l shell 调用的选项,以确保它读取所有重新启动命令文件,例如 /etc/profile 。我认为这些文件包含 $PATH 的设置在 bash 中。

编辑2:

添加类似 pwd 的内容到 RunModels.scr 开头这样您就可以验证您是否确实位于正确的目录中。检查是否有cd rc 文件中的命令!

编辑3:

错误/usr/bin/bash: RunModels.scr: No such file or directory如果 bash 找不到脚本中调用的命令之一,也可以生成此命令。尝试添加 -v bash 选项以查看是否提供更多信息。

关于python - 在 Windows 上从 Python 执行 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41645415/

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