运行bash脚本并生成OSError的Python
我有一个bash脚本,它可以帮助建立本地运行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
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
。