我想执行一个shell脚本,而不必在命令行本身上指定任何其他参数。相反,我想对参数进行硬编码,例如:输入文件名和文件路径,在shell脚本中。
玩具shell脚本:
#!/bin/bash
time python3 path/to/pyscript/graph.py \
--input-file-path=path/to/file/myfile.tsv
因此,当我运行$ ./script.sh
时,脚本应该将输入文件信息传递给py脚本。
可以这样做吗?我总是得到错误"没有这样的目录或文件" ......
注意,我将使用argparse
处理python脚本端的参数。
修改
事实证明,这个问题是由我在上面的玩具脚本中遗漏的东西造成的,因为我没有想到它可能是原因。事实上,我有一行注释掉了,这条线阻止了脚本的运行。
玩具shell脚本完整版:
#!/bin/bash
time python3 path/to/pyscript/graph.py \
# this commented out line prevents the script from running
--input-file-path=path/to/file/myfile.tsv
答案 0 :(得分:2)
我怀疑你的脚本是正确的,但文件路径错误。也许你忘了领先的正斜线。无论如何,请确保path/to/pyscript/graph.py
和path/to/file/myfile.tsv
正确无误。
如何使用BASH脚本中的硬编码参数调用python脚本的虚拟示例:
$ cat dummy_script.py
import argparse
import os
import time
parser = argparse.ArgumentParser()
parser.add_argument("-i", "--input-file-path")
args = parser.parse_args()
if os.path.isfile(args.input_file_path):
print args.input_file_path, "is a file"
print "sleeping a second"
time.sleep(1)
$ cat time_python_script.sh
time python dummy_script.py --input-file-path=/etc/passwd
$ /bin/bash time_python_script.sh
/etc/passwd is a file
sleeping a second
real 0m1.047s
user 0m0.028s
sys 0m0.016s