从python运行shell脚本

时间:2016-08-28 15:17:14

标签: python shell unix vi csh

我编写了一个小的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

1 个答案:

答案 0 :(得分:0)

如果这很有用,我使用xxd(如上面评论中所建议的,http://linuxcommand.org/man_pages/xxd1.html)将两个脚本文件(一个在python中创建,一个手动编写)转换为十六进制

xxd script.txt output.txt

然后我将这两个文件的输出与diff进行了比较,并且可以在文件末尾以十六进制显示另一个字符0a。这对应于换行符。正如此处详细Why should text files end with a newline?和此处VIM Disable Automatic Newline At End Of Filevi如果不存在,则在文件末尾添加换行符。这使脚本能够运行。如果最后没有换行符(我没有包含在python脚本中),脚本就不会运行。