Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用参数从bash调用Python脚本_Python_Linux_Bash_Shell_Debian - Fatal编程技术网

使用参数从bash调用Python脚本

使用参数从bash调用Python脚本,python,linux,bash,shell,debian,Python,Linux,Bash,Shell,Debian,我知道我可以使用以下命令从我的bash脚本运行python脚本: python python_script.py 但是如果我想从bash脚本向python脚本传递一个变量/参数呢。我该怎么做 基本上,bash将生成一个文件名,然后python将其上载,但我需要在调用它时将文件名从bash发送到python。使用 python python_script.py filename 在Python脚本中 import sys print sys.argv[1] 除此之外,还要看一看模块,它帮助定

我知道我可以使用以下命令从我的bash脚本运行python脚本:

python python_script.py
但是如果我想从bash脚本向python脚本传递一个变量/参数呢。我该怎么做

基本上,bash将生成一个文件名,然后python将其上载,但我需要在调用它时将文件名从bash发送到python。

使用

python python_script.py filename
在Python脚本中

import sys
print sys.argv[1]
除此之外,还要看一看模块,它帮助定义脚本的选项和参数

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

看一下这个模块。 它对我很有效

在脚本中使用:

echo $(python python_script.py arg1 arg2) > /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
#/bin/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

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

pythonprog.py“$argument”
&
#由于某些原因,&将控件直接返回到bash脚本,因此必须在backticks之外。此消息的预览显示时,命令两边都没有“`”


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

打印所有不带文件名的参数:

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

在Debian的默认shell中执行
python-python\u-script.py
时,您已经在使用bash了…所以只需在bash脚本中执行:
python-python\u-script.py arg1 arg2…
@Jimmy Unprepared问题我想,它很容易链接:可以替换“string-arg”对于一个来自bash的变量?我同意,对我来说,argparse是一个比sys.argv更好的选项开始:注意:getopt模块是一个用于命令行选项的解析器,它的API是为C getopt()函数的用户设计的。不熟悉C getopt()的用户函数或想编写更少代码并获得更好的帮助和错误消息的人应该考虑使用AgPARSE模块。谢谢。然而,这种方式只限制了一个用例的Python文件。有没有办法调用具有BASH脚本中动态参数的Python文件的方法?这样,我们就能使用相同的P。ython文件。我试图在bash脚本中使用$var调用python文件方法,但以某种方式失败。@burcak如果要基于动态参数并行执行python文件,请首先在bash脚本中构造完整的路径/param1 param2 |/param3 param4,然后将输出作为参数传递给下面的python脚本脚本,import sys import subprocess arg_str=“”.join(sys.argv[1:])cmds=arg_str.split(“|”)用于cmds:print('call-->+cmd)subprocess.Popen(cmd,shell=True)print('call cmds finished')中的cmd
import sys
print sys.argv[0] # prints python_script.py
print sys.argv[1] # prints var1
print sys.argv[2] # prints var2
for i in range(1, len(sys.argv)):
print(sys.argv[i])