我想执行一个 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
最佳答案
我怀疑你的脚本是正确的,但文件路径是错误的。也许您忘记了前导正斜杠。无论如何,确保 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
关于python - 将参数从 shell 脚本传递到 Python 脚本,而无需在命令行上指定参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40835127/