运行bash脚本并生成OSError的Python

运行bash脚本并生成OSError的Python,python,bash,simplehttpserver,Python,Bash,Simplehttpserver,我有一个bash脚本,它可以帮助建立本地SimpleHTTPServer python -m SimpleHTTPServer 8080 我已经把它放在我的项目文件夹里了。当我使用以下命令运行程序时: subprocess.call('./setup.sh') 出现一条错误消息: Traceback (most recent call last): File "test.py", line 2, in <module> subprocess.call('./setup

我有一个bash脚本,它可以帮助建立本地
SimpleHTTPServer

python -m SimpleHTTPServer 8080
我已经把它放在我的项目文件夹里了。当我使用以下命令运行程序时:

subprocess.call('./setup.sh')
出现一条错误消息:

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    subprocess.call('./setup.sh')
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 709, in __init__
    errread, errwrite)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1326, in _execute_child
    raise child_exception
OSError: [Errno 13] Permission denied
它工作得很好。
我记得有几次终端弹出一个窗口,问我python对防火墙的许可,我允许了。你能帮我吗?

像在shell上一样运行它,即作为
sh./setup.sh

subprocess.call('sh ./setup.sh', shell=True)
这应该能奏效。最可能的情况是,您的
设置.sh未设置为可执行或缺少第一个
#标记其解释器的行

编辑:

如果将其作为单个字符串传递,请确保设置
shell=True
以通过shell执行它,或者像使用
execve
一样将参数分隔到列表中:

subprocess.call(['sh', './setup.sh'])

完全按照在shell上运行的方式运行它,即作为
sh./setup.sh

subprocess.call('sh ./setup.sh', shell=True)
这应该能奏效。最可能的情况是,您的
设置.sh未设置为可执行或缺少第一个
#标记其解释器的行

编辑:

如果将其作为单个字符串传递,请确保设置
shell=True
以通过shell执行它,或者像使用
execve
一样将参数分隔到列表中:

subprocess.call(['sh', './setup.sh'])

完全按照在shell上运行的方式运行它,即作为
sh./setup.sh

subprocess.call('sh ./setup.sh', shell=True)
这应该能奏效。最可能的情况是,您的
设置.sh未设置为可执行或缺少第一个
#标记其解释器的行

编辑:

如果将其作为单个字符串传递,请确保设置
shell=True
以通过shell执行它,或者像使用
execve
一样将参数分隔到列表中:

subprocess.call(['sh', './setup.sh'])

完全按照在shell上运行的方式运行它,即作为
sh./setup.sh

subprocess.call('sh ./setup.sh', shell=True)
这应该能奏效。最可能的情况是,您的
设置.sh未设置为可执行或缺少第一个
#标记其解释器的行

编辑:

如果将其作为单个字符串传递,请确保设置
shell=True
以通过shell执行它,或者像使用
execve
一样将参数分隔到列表中:

subprocess.call(['sh', './setup.sh'])

尝试
subprocess.Popen()
cwd参数:

subprocess.Popen(['sh', './setup.sh'], cwd='/dir/contains/setup.sh/')

尝试
subprocess.Popen()
cwd参数:

subprocess.Popen(['sh', './setup.sh'], cwd='/dir/contains/setup.sh/')

尝试
subprocess.Popen()
cwd参数:

subprocess.Popen(['sh', './setup.sh'], cwd='/dir/contains/setup.sh/')

尝试
subprocess.Popen()
cwd参数:

subprocess.Popen(['sh', './setup.sh'], cwd='/dir/contains/setup.sh/')


您可能需要在
setup.sh
上设置可执行位。以root(sudo)身份运行可能需要在
setup.sh
上设置可执行位。以root(sudo)身份运行可能需要在
setup.sh
上设置可执行位。以root(sudo)身份运行您可能需要在
setup.sh
上设置可执行位。在这种情况下,以root(sudo)身份运行它,但它表示OSError:[Errno 2]没有这样的文件或目录集
shell=True
。这将要求Python通过shell执行命令(基本上与
os.system()
),或者在列表中显式分隔“sh”和参数。是的,现在它工作正常。然而,我注意到python一直在运行。这是否意味着在执行时我无法继续?如果您想要一个单独的进程,请使用
subprocess.Popen
而不是
subprocess.call
。我已经尝试过了,但它说OSError:[Errno 2]在这种情况下,没有这样的文件或目录集
shell=True
。这将要求Python通过shell执行命令(基本上与
os.system()
),或者在列表中显式分隔“sh”和参数。是的,现在它工作正常。然而,我注意到python一直在运行。这是否意味着在执行时我无法继续?如果您想要一个单独的进程,请使用
subprocess.Popen
而不是
subprocess.call
。我已经尝试过了,但它说OSError:[Errno 2]在这种情况下,没有这样的文件或目录集
shell=True
。这将要求Python通过shell执行命令(基本上与
os.system()
),或者在列表中显式分隔“sh”和参数。是的,现在它工作正常。然而,我注意到python一直在运行。这是否意味着在执行时我无法继续?如果您想要一个单独的进程,请使用
subprocess.Popen
而不是
subprocess.call
。我已经尝试过了,但它说OSError:[Errno 2]在这种情况下,没有这样的文件或目录集
shell=True
。这将要求Python通过shell执行命令(基本上与
os.system()
),或者在列表中显式分隔“sh”和参数。是的,现在它工作正常。然而,我注意到python一直在运行。这是否意味着在执行此操作时我无法继续?如果需要单独的进程,请使用
subprocess.Popen
而不是
subprocess.call