【发布时间】:2016-08-28 15:17:13
【问题描述】:
我写了一个小python程序,它写了一个C-shell脚本,然后用子进程调用这个脚本。但是,python 无法执行脚本。我在终端中对此进行了测试,发现该脚本也不会从终端运行(即不是 python 问题)。进一步的测试表明,我可以在文本编辑器 (vi) 中编写相同的脚本,然后从终端成功执行它(即我认为脚本的内容没有问题)。最终我发现,如果我尝试使用./myscript.com 直接在终端中运行 python 的输出,它将不运行。但是,如果我用 vi 打开,进行 NO 更改,保存然后使用./myscript.com(即完全相同的命令)从终端运行,它将执行。该脚本包含在下面,以防万一,但是,大多数内容都非常特定于我要运行的特定程序。我不知道如何进一步调试,也不知道为什么在 vi 中打开、保存和关闭的效果足以让脚本执行。 (例如,我已经检查了权限,并且在 vi 步骤之后这些权限没有改变。)任何关于如何进行的建议都非常感谢。
#!/bin/csh
#
bin2pipe -in /full/path/to/this/script/recon.spc -bad 0.0 -noswap \
-xN 1714 \
-xT 1714 \
-xFT Freq \
-xMODE Real \
-xSW 4184.570312 \
-xCAR 10.929523 \
-xOBS 800.130005 \
-xLAB 1H \
-yN 2048 \
-yT 2048 \
-yFT Freq \
-yMODE Real \
-ySW 1700.680054 \
-yCAR 125.728023 \
-yOBS 81.075996 \
-yLAB 1H \
-ndim 2 \
|nmrPipe -fn TP -auto \
|nmrPipe -fn REV \
|nmrPipe -fn TP -auto \
-out recon.spc.pipe.ft2 -ov -verb
【问题讨论】:
-
你是如何从 Python 中调用它的?
-
从 python 我把它称为
subprocess.call(FileName),之前设置了文件权限,所以它可以用os.chmod(FileName, 0o755)执行我注意到的一件事是在 vi 中打开、保存和关闭会增加 1 个字节文件大小(492 到 493 字节)。我不知道这是否重要,或者这个额外的字节被添加到哪里。 -
您可以逐字节比较这两个文件,看看有什么不同。 换行符是等价的吗? Unicode 与 ascii?
-
将 shebang 更改为
#!/bin/sh可能无济于事,但出于其他原因强烈推荐。 -
需要正确调用文件
subprocess.call(["/bin/csh", "/full/path/to/file"])