Python:从命令行运行小型多行脚本

时间:2019-01-31 10:06:25

标签: python shell

我有一堆非常小的python脚本,我想从命令行运行。这是一个这样的例子:

import os
for f in os.listdir():
    if not os.path.isdir(f) and f.endswith('.c'):
        dir=f[:-2]
        os.makedirs(dir)
        os.rename( f, dir + '/' + f  )  

我非常清楚,我可以将其另存为python脚本(例如renamer.py)并像这样运行脚本:

python renamer.py

但是,在编译库时,我有很多这样的小脚本,并且只想将它们连接成一个单独的shell脚本。我只是不知道语法。我认为Shell脚本应如下所示:

#!/usr/bin/env bash

python -c/
"import os;"/
"for f in os.listdir():;"/
"    if not os.path.isdir(f) and f.endswith('.c'):;"/
"        dir=f[:-2];"/
"        os.makedirs(dir);"/
"        os.rename( f, dir + '/' + f  );"  

但是当我运行它时,我得到了错误:

  File "<string>", line 1
    /
    ^
SyntaxError: invalid syntax
./py_test.sh: line 4: import os;/: No such file or directory
./py_test.sh: line 5: for f in os.listdir():;/: No such file or directory
./py_test.sh: line 6:     if not os.path.isdir(f) and f.endswith('.c'):;/: No such file or directory
./py_test.sh: line 7:         dir=f[:-2];/: No such file or directory
./py_test.sh: line 8:         os.makedirs(dir);/: No such file or directory
./py_test.sh: line 9:         os.rename( f, dir + '/' + f  );: No such file or directory

我在这里想念什么?

3 个答案:

答案 0 :(得分:2)

最好将它们放在Python模块中,将x.py作为函数,并使用python -c "import x; x.y()"作为调用它们的命令。

然后,您将可以放置通用代码,并且可以打开文件并突出显示Python语法。

答案 1 :(得分:0)

我一直在想太多。

这有效

#!/usr/bin/env bash

python -c "
import os
for f in os.listdir():
    if not os.path.isdir(f) and f.endswith('.c'):
        dir=f[:-2]
        os.makedirs(dir)
        os.rename( f, dir + '/' + f  )  
"

答案 2 :(得分:0)

我建议您将功能收集到Python module上某处正确的PYTHONPATH中(根据Dan D的回答)。

但是,我建议不要在shell脚本中调用python -c "import renamer; renamer.rename()",而建议在单个Python脚本中调用函数,而完全避免使用shell脚本:

#!/usr/bin/env python3

import renamer
import other_fun

if __name__ == "__main__":
    renamer.rename()
    ...