繁体   English   中英

从python运行shell脚本

[英]Running shell script from python

我编写了一个小的python程序,该程序编写了C-shell脚本,然后使用子进程调用该脚本。 但是,python无法执行脚本。 我在终端中对此进行了测试,发现脚本也不会从终端运行(即不是python问题)。 进一步的测试表明,我可以在文本编辑器(vi)中编写相同的脚本,然后从终端成功执行该脚本(即,我认为脚本的内容不存在问题)。 最终,我发现如果尝试使用./myscript.com直接在终端中运行python的输出,它将无法运行。 但是,如果我用vi打开,进行任何更改,保存,然后使用从终端运行./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

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

xxd script.txt output.txt

然后,我将两个文件的输出与diff并在文件末尾看到一个附加的十六进制字符0a 这对应于换行符。 如此处所述, 为什么文本文件应以换行符结尾? VIM在文件末尾禁用自动换行符 ,如果没有, vi 在文件末尾添加换行符。 这使脚本可以运行。 最后没有换行符(我没有包含在python脚本中),该脚本将无法运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM