我正在编写一些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函数没有正确转换替换变量。
现在有人解决了这个问题吗?我是否需要先转换主机名变量?
罗兰
答案 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]))