我知道我可以使用下面的命令从我的bash脚本运行一个python脚本:
python python_script.py
但如果我想从我的bash脚本传递一个variables/参数到我的python脚本呢? 我怎样才能做到这一点?
基本上bash会产生一个文件名,然后python会上传,但我需要从bash发送文件名为python,当我打电话。
要在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
使用
python python_script.py filename
并在你的Python脚本
import sys print sys.argv[1]
在sys.argv
旁边,还要看看argparse模块,它帮助定义脚本的选项和参数。
argparse模块使编写用户友好的命令行界面变得非常简单。
嵌入式选项:
在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
在脚本中使用:
echo $(python python_script.py arg1 arg2) > /dev/null
要么
python python_script.py "string arg" > /dev/null
该脚本将被执行而不输出。
我有一个bash脚本,调用一个小的python例程来显示一个消息窗口。 因为我需要使用killall来停止python脚本,所以我不能使用上面的方法,因为它会意味着运行killall python,这可能会拿出其他的python程序,所以我使用
pythonprog.py "$argument"
& #将控制直接返回给bash脚本,所以必须在反引号之外。 由于某种原因,这条消息的预览显示没有命令的任何一边。
只要python脚本可以通过名称而不是python pythonprog.py在cli中运行,就可以在脚本中使用。 如果您需要多个参数,请在引号内的每个参数之间使用一个空格。
并看看getopt模块。 这对我来说相当好!