将命令行参数传递给Python脚本以连接到web服务器

2 投票
2 回答
2368 浏览
提问于 2025-04-16 17:17
'single_quotes' 
"double_quotes"
http://%s/path/file.php % value  

我正在写一些脚本,目的是检查我是否能在一个网络服务器上处理信息。

我用一个bash脚本作为包装脚本,来顺序启动多个python脚本。这个包装脚本需要输入网络服务器的主机名、用户名和密码,完成一些任务后,再把这些信息交给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]

这些值打印得很正确。现在,我尝试传递这些值以打开与网络服务器的连接:
(我已经成功使用实际的主机名打开了与网络服务器的连接)

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

但是,尝试使用变量替换的格式时出现了以下错误:

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

我尝试了不同的变量替换方式,但总是得到相同的错误。

我猜测urlopen函数没有正确转换替换后的变量。

有没有人知道怎么解决这个问题?我需要先转换主机名变量吗?

罗兰

2 个回答

1

这段代码:

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

应该改成:

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

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 中那样简单地把一个变量放进字符串里,让它自动变成变量的值。

也就是说,在 PHP 中,这样写是可以的:

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

而这样写就不行:

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

在 Python 中,所有的字符串都像 PHP 中的单引号字符串那样处理。

撰写回答