python - 将参数从 shell 脚本传递到 Python 脚本,而无需在命令行上指定参数

标签 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 

最佳答案

我怀疑你的脚本是正确的,但文件路径是错误的。也许您忘记了前导正斜杠。无论如何,确保 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

关于python - 将参数从 shell 脚本传递到 Python 脚本,而无需在命令行上指定参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40835127/

相关文章:

python - 使用 `iter' 函数会消耗生成器吗?

Python - 根据第一个单词对文件中的行进行排序?

python - 跨模块重用类对象

linux - 如何使用 curl 或 wget 将文件下载到目录中?

macos - 递归地将所有文件移动到一个文件夹,保留最大的文件

linux - Bash 脚本通过管道将多个命令发送到一封电子邮件

java - 将javax包导入python

android - 在 Android 手机上托管 SQL 服务器

linux - AWS ubuntu实例无法到达世界

python - 自动ssh进入服务器的脚本