无法在Python中使用subprocess模块(没有这样的文件)

2024-10-16 11:20:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在python代码中启动bash脚本。 假设包含bash脚本的文件名为“/home/myname”/我的文件.sh“,我试过:

import subprocess
subprocess.call(['/home/myname/myfile.sh'])

但我得到:

^{pr2}$

当我尝试:

subprocess.call(['/home/myname/myfile.sh'], shell=True)

我得到:

/bin/sh: 1: /home/myname/myfile.sh: not found

我更想提出论点,在网上搜索我发现的方法:

subprocess.call(['/home/myname/myfile.sh', arg1], shell=True)

但自从我得到:

arg1: 1: arg1: /home/myname/myfile.sh: not found

谁能帮帮我吗?:)


Tags: 代码脚本bashtruehome文件名shnot
2条回答

我不知道是什么原因导致了你的问题。但我看到了一些我关心的事情:

  1. 对于subprocess.call(),您应该给出一个字符串列表,第一个是可执行文件的路径,其余的是单个参数;然后您应该使用shell=False(或者忽略它,因为这是默认值)。或者您传递shell=True,那么您应该只传递一个字符串(不是字符串列表!)它将由shell解释和拆分,因此它应该包含可执行文件的路径和所有参数(如有必要,在引用的版本中)。在

    所以要么

    subprocess.call([ '/path/to/executable', 'arg1', 'arg2' ]) # shell=False

    或者

    subprocess.call('/path/to/executable "arg1" "arg2"', shell=True)

  2. 出现错误消息not found的原因有多种。在

    a.指定可执行文件路径的错误方法(例如,shell=True和字符串列表;没有尝试过)。在

    b.可执行文件本身不存在(但您检查了您所说的)。在

    c.可执行文件不可执行(权限位丢失)。在

    可执行文件在它的第一行中指定了一个不存在的解释器(使用#!),该解释器不存在(例如#!/bin/sh或类似的)。

这些都适用吗?在

确保脚本:

  1. 存在;

  2. 设置了可执行位。

另外,请确保在Python脚本中引用脚本时没有使用tilda~。在

相关问题 更多 >