gpt4 book ai didi

python - 从 Python 运行 bash 脚本但出现 Windows 错误 193

转载 作者:行者123 更新时间:2023-12-01 04:49:37 25 4
gpt4 key购买 nike

我尝试从 Python 运行 shell 脚本,但我得到了

WindowsError: [Error 193] %1 is not a valid Win32 application

我的简化代码如下:

import subprocess
subprocess.call(["%s/scripts/test.sh"%work_path, "arg1", "arg2"])

奇怪的是这在 Linux 上运行得很顺利。

test.sh 在 header 中具有 bash 的有效路径,并且 bash 可执行文件包含在 %PATH% 中。我什至尝试使用参数 shell=True,但结果是相同的。

最佳答案

我也遇到了同样的问题。这是我在 MinGW (msysgit) 中从 python 运行 shell 脚本的方法:

from subprocess import call
arg1 = 1
arg2 = 10
cmd = ['C:\\Program Files (x86)\\Git\\bin\\bash.exe', '-c', '~/bin/myscript', arg1, arg2]
result_code = call(cmd)

关键是明确拼写 bash.exe 的路径作为第一个参数,“-c”(命令)作为第二个参数,并使用脚本作为第三个参数。后续参数将转到脚本(有时 - 见下文)。

一些注意事项:

%PROGRAMFILES% 和其他 Windows 变量在搜索 bash.exe 文件时无法解析 - 您可以通过使用 python 构造路径而不是硬编码名称来解决此问题。

用 ~ 替换您的 mingw 主目录可以工作,并且 .bashrc.profile 中的 PATH 变量也可以工作。如果省略“-c”参数,您可以访问本地脚本(在 ~ 中),但对于“true”和“ls”等命令,不存在 mingw 根文件结构。

我还没有完全弄清楚何时组合参数以及何时不组合参数,例如,此命令有效:

cmd = ['C:\\Program Files (x86)\\Git\\bin\\bash.exe', '-c', 'echo hi']
result_code = 调用(cmd)

但这不是:

cmd = ['C:\\Program Files (x86)\\Git\\bin\\bash.exe', '-c', 'echo', 'hi']
result_code = 调用(cmd)

但是,使用我的 shell 脚本,这是可行的:

cmd = ['C:\\Program Files (x86)\\Git\\bin\\bash.exe', '-c', '~bin/myscript', arg1, arg2]
result_code = 调用(cmd)

但这不是:

cmd = ['C:\\Program Files (x86)\\Git\\bin\\bash.exe', '-c', '~bin/myscript 1 10']
result_code = 调用(cmd)

在所有情况下,成功执行 bash.exe 时 result_code 均为 0。我不知道如何将脚本的输出返回到 python。这会打印输出,但不会将其发送回主进程。我需要将结果返回给调用程序,但这可能是涉及输出管道和文件重定向的另一个问题。

简而言之。这是一团糟,但脚本执行了。当然,在某个地方有更一致的技术。

关于python - 从 Python 运行 bash 脚本但出现 Windows 错误 193,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28737993/

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