如何将Python程序插入到Bash脚本中?

3

我有一个小的Python程序,它解析一个文本文件并将输出写入另一个文件。目前,我正在编写一个bash脚本来多次调用此程序,大致如下:

for i in $(seq 1 100); do

          python /home/Documents/myProgram.py myTextFile$i

done

这个方法可以工作,但我想知道是否可能将python程序放在bash脚本文件内,这样当其他用户运行脚本时,他们不需要在内存中拥有python程序。也就是说,是否可能将Python程序复制粘贴到Bash脚本中,并从脚本内部运行它?


5
另外,你可以将程序的输出echo到与脚本相邻的文件中,然后从那里运行它,并在之后使用rm删除该文件。但是,请不要这样做。这样做会使得该程序没有语法高亮,难以维护。最好将其与脚本一起打包,或者让Python脚本完全替换bash部分。 - tobias_k
这可能也取决于Python程序中有什么... - Wilf
@tobias_k:替换+1,因为Python也可以使用for循环。 - Benjamin Bannier
不直接涉及您的问题,但被认为是一种改进的方式是:对于i在{1..100}中循环;做...-原因:大括号扩展是bash内置的,不需要子shell,而seq不是,需要子shell并且不是普遍存在的。有些人更喜欢使用((...;;))样式的循环,但这些也可以在Python中找到。 - Deleted User
4个回答

14
#!/bin/bash

python - 1 2 3 << 'EOF'
import sys

print 'Argument List:', str(sys.argv)
EOF

输出:

Argument List: ['-', '1', '2', '3']

5
我认为您应该能够放置以下内容:
python  << END
[Python code here]
END

但我还没有测试过这个。

1
是的,@Cyrus 似乎已经解决了。 - dpwilson
我们有相同的想法,使用这里文档。 - Cyrus

1

对于简单的脚本,您也可以使用-c选项运行Python。例如:

python -c "x=1; print x; print 'great program eh'"

我不建议写太复杂的东西,但对于一些简单的内容可能会有用。

0

抱歉打扰了这个旧帖,但是这里有一种被遗漏的技巧可能对某些人很有用。

#!/bin/bash
""":" # Hide bash from python
for i in $(seq 1 100); do
  python3 $(readlink -f "$0") myTextFile$i
done
exit
"""
# Python script starts here
import sys
print('Argument List: ', str(sys.argv))

然而,我同意一般建议只在Python中执行循环。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接