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

将命令行参数传递给Python脚本,以便能够打开到web服务器的连接,python,Python,我正在编写一些shell脚本,以检查是否可以在web服务器上操作信息 我使用bashshell脚本作为包装器脚本,以顺序启动多个python脚本 包装器脚本采用web服务器的主机名、用户名和密码。完成一些任务后,将其交给python脚本 我可以将信息传递给python脚本 host% ./bash_script.sh host user passwd 在包装器脚本中,我执行以下操作: /usr/dir/python_script.py $1 $2 $3 print "Parameters:

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

我使用bashshell脚本作为包装器脚本,以顺序启动多个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服务器的连接)

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

HTTP Response Arguments:  (gaierror(8, 'nodename nor servname provided, or not known'),)
我尝试了不同的变化

'single_quotes' 
"double_quotes"
http://%s/path/file.php % value  
对于变量替换,我总是得到相同的错误

我假设urlopen函数不能正确转换替换的变量

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


罗兰

执行变量替换时,需要引用字符串:

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中的单引号字符串。

这是:

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

应该是:


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

您好,谢谢,您提出的解决方案成功了。为什么肖恩的解决方案不起作用?另外,在“urlopen”函数调用中嵌入输入参数与在外部嵌入输入参数有什么区别?f_handler=urlopen(“https://%s/path/menu.php”%(sys.argv[1]))f_handler=urlopen(“https://%s/path/menu.php”)%sys.argv[1]是因为参数没有传递给函数吗?我不确定Sean的解决方案是否有效。至于第二个问题,格式字符串后面必须跟它的参数(包含在
%()
中的值)。如果你把参数列表放在函数之外,那么它们就不会被传递到格式字符串,python也无法扩展它。顺便说一下,我的问题得到了难以置信的快速回答。Thanks@roland顺便说一句,肖恩的解决方案很有效。这是一个简单的替代品。你也不需要括号。@AJ,谢谢,这应该是一个简单的变量替换,但我不认为肖恩的解决方案有效。
'http://$some_variable/path/to/file.php'