将命令行参数传递给Python脚本,以便能够打开与Web服务器的连接

时间:2011-05-09 16:37:45

标签: python

我正在编写一些shell脚本来检查我是否可以在Web服务器上操作信息。

我使用bash shell脚本作为包装脚本按顺序启动多个python脚本 包装器脚本获取Web服务器的主机名和用户名和密码。并在执行某些任务后,将其交给python脚本。

获取传递给python脚本的信息

没问题
host% ./bash_script.sh host user passwd

在包装器脚本中,我执行以下操作:

/usr/dir/python_script.py $1 $2 $3

print "Parameters: "
print "Host: ", sys.argv[1]
print "User: ", sys.argv[2]
print "Passwd: ", sys.argv[3]

正确打印值 现在,我尝试传递值以打开与Web服务器的连接:     (我使用文字主机名成功打开了与Web服务器的连接)

f_handler = urlopen("https://sys.argv[1]/path/menu.php")

尝试变量替换格式会引发以下错误:

HTTP Response Arguments:  (gaierror(8, 'nodename nor servname provided, or not known'),)

我尝试了不同的变体,

'single_quotes' 
"double_quotes"
http://%s/path/file.php % value  

用于变量替换,但我总是得到相同的错误

我假设urlopen函数没有正确转换替换变量。

现在有人解决了这个问题吗?我是否需要先转换主机名变量?

罗兰

2 个答案:

答案 0 :(得分:1)

在进行变量替换时需要引用字符串:

http://%s/path/file.php % value  # Does not work
"http://%s/path/file.php" % value # Works
'http://%s/path/file.php' % value # Also works
"""http://%s/path/file.php""" % value # Also works

Python不像PHP那样进行字符串插值 - 因此无法简单地将变量“嵌入”字符串并将变量解析为其值。

也就是说,在PHP中,这有效:

"http://$some_variable/path/to/file.php"

而这不是:

'http://$some_variable/path/to/file.php'

在Python中,所有字符串的行为都与PHP中的单引号字符串相同。

答案 1 :(得分:1)

此:

f_handler = urlopen("https://sys.argv[1]/path/menu.php")

应该是:

f_handler = urlopen("https://%s/path/menu.php"%(sys.argv[1]))