我正在使用Centos 7.0并在Pydev环境中安装了Eclipse Kepler。我想使用子进程通过Python运行一个简单的c shell脚本,如下所示:
import subprocess
subprocess.call(["./test1.csh"])
这个c shell脚本在终端中执行,如果我运行命令,如" ls"或者"" pwd然后我得到正确的输出,例如。
subprocess.call(["ls"]) # give me the list of all files
subprocess.call(["pwd"]) # gives me the location of current directory.
但是当我运行subprocess.call([" ./ test1.csh"])时,我收到以下错误:
Traceback (most recent call last):
File "/home/nishant/workspace/codec_implement/src/NTTool/raw2waveconvert.py", line 8, in <module>
subprocess.call(["./test1.csh"])
File "/usr/lib64/python2.7/subprocess.py", line 524, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1308, in _execute_child
raise child_exception
OSError: [Errno 13] Permission denied
我哪里错了?请建议
答案 0 :(得分:2)
确保文件test1.csh
是可执行的。正如Lukas Graf评论的那样,还要检查第一行中的shebang(#!...
)。
要确认这一点,在通过Python运行之前,请在shell中运行它。
$ ls -l test1.csh
...
$ ./test1.csh
当前工作目录与在终端中运行时不同。指定shell脚本的完整路径。或者更改PyDev中的工作目录配置。
<强>更新强>
预装shell可执行文件:
import subprocess
subprocess.call(["csh", "./test1.csh"])