将参数从shell脚本传递到Python脚本,而不必在命令行

时间:2016-11-27 23:30:55

标签: python linux bash shell

我想执行一个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 

1 个答案:

答案 0 :(得分:2)

我怀疑你的脚本是正确的,但文件路径错误。也许你忘了领先的正斜线。无论如何,请确保path/to/pyscript/graph.pypath/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