使用参数从 bash 调用 Python 脚本

我知道可以使用以下方法从 bash 脚本运行 python 脚本:

python python_script.py

但是如果我想从 bash 脚本中向 Python 脚本传递一个变量/参数会怎么样呢。我该怎么做?

基本上 bash 会产生一个文件名,然后 python 会上传它,但是当我调用它时,我需要将文件名从 bash 发送给 python。

284748 次浏览

使用

python python_script.py filename

在你的 Python 脚本中

import sys
print sys.argv[1]

除了 sys.argv,还可以看看 Argparse模块,它有助于定义脚本的选项和参数。

Argparse 模块使得编写用户友好的命令行界面变得很容易。

看看 选择模块。 我觉得挺好的!

在剧本中使用:

echo $(python python_script.py arg1 arg2) > /dev/null

或者

python python_script.py "string arg"  > /dev/null

脚本将在没有输出的情况下执行。

嵌入式选项:

在 bash 函数中包装 python 代码。

#!/bin/bash


function current_datetime {
python - <<END
import datetime
print datetime.datetime.now()
END
}


# Call it
current_datetime


# Call it and capture the output
DT=$(current_datetime)
echo Current date and time: $DT

使用环境变量,将数据传递到嵌入的 python 脚本中。

#!/bin/bash


function line {
PYTHON_ARG="$1" python - <<END
import os
line_len = int(os.environ['PYTHON_ARG'])
print '-' * line_len
END
}


# Do it one way
line 80


# Do it another way
echo $(line 80)

Http://bhfsteve.blogspot.se/2014/07/embedding-python-in-bash-scripts.html

要在 bash 脚本中执行 python 脚本,您需要调用与在终端中相同的命令。比如说

> python python_script.py var1 var2

要访问 python 中的这些变量,您需要

import sys
print(sys.argv[0]) # prints python_script.py
print(sys.argv[1]) # prints var1
print(sys.argv[2]) # prints var2

我有一个 bash 脚本,它调用一个小的 python 例程来显示一个消息窗口。因为我需要使用 kill all 来停止 python 脚本,所以我不能使用上面的方法,因为这将意味着运行 kill all python,它可以删除其他 python 程序,所以我使用

& 将控制直接返回到 bash 脚本,因此必须在反勾之外。由于某种原因,此消息的预览版显示在命令的两边都没有“‘”。

只要 python 脚本在 cli 中按名称而不是 python pythonpro.py 运行,就可以在脚本中运行。如果需要多个参数,只需在每个参数之间使用引号中的空格即可。

打印所有没有文件名的参数:

for i in range(1, len(sys.argv)):
print(sys.argv[i])