我有一堆非常小的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
我在这里想念什么?
答案 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()
...