我在python中编码,我遇到了问题。 我有 file1.py:
import os, sys, platform, getpass, tempfile
import webbrowser
import string
import json
import cgi, cgitb
def main( addr, name):
os.environ["REMOTE_ADDR"] = addr
print os.environ ["REMOTE_ADDR"]
template = open('file2.py').read()
tmpl = string.Template(template).substitute(
name = name,
addr = cgi.escape(os.environ["REMOTE_ADDR"]),
os = user_os,
user_name = user_login,
)
f = tempfile.NamedTemporaryFile(prefix='/tmp/info.html', mode='w', delete=False)
f.write(contenu)
f.close()
webbrowser.open(f.name)
if __name__ == "__main__":
addr = sys.argv[1]
name = sys.argv[2]
user_os = sys.platform
sys.argv.append(user_os)
user_login = getpass.getuser()
sys.argv.append(user_login)
main(addr, name)
file2.py 中的
<form name="sD" method="get" action="${addr}">
但我有这个错误,我试图解决它,但我不知道该怎么做:(
Traceback (most recent call last):
File "./file1.py", line 47, in <module>
main(addr, name)
File "./file1.py", line 22, in main
addr = cgi.escape(os.environ["REMOTE_ADDR"])
File "/usr/lib/python2.6/UserDict.py", line 22, in __getitem__
raise KeyError(key)
KeyError: 'REMOTE_ADDR'
我的问题是,我不知道如何在命令行中添加addr变量并在单击“确定”按钮时在URL中恢复该IP地址
请帮帮我:(
答案 0 :(得分:1)
您的代码存在多个问题。
首先,正如您previous question中提到的那样:
你不(我重申:你不)想要客户端的IP作为网址 你的表格的行动
您认为这行代码到底会发生什么?
<form name="sD" method="get" action="${addr}">
它会尝试将表单发送给最终用户的IP地址。 这会失败。这会失败,因为
至于您丢失的密钥错误,您没有设置环境变量。您可以通过以下几种方式实现这一目标:
set REMOTE_ADDR=<value>
。将<value>
替换为适当的值。请记住导入os
import os
os.environ["REMOTE_ADDR"] = "value"
同样,value
应该是适当的值。
您想要的一个非常简单的示例:
import os, sys
def main( addr, name):
os.environ["REMOTE_ADDR"] = addr
print os.environ["REMOTE_ADDR"]
if __name__ == "__main__":
addr = sys.argv[1]
name = sys.argv[2]
main(addr, name)
输出:
>python test.py "address" "name"
address
>python test.py "http://www.google.com" "name"
http://www.google.com
最后,如previous question:
中所述你不(我重申:你不)想要客户端的IP作为网址 你的表格的行动
答案 1 :(得分:0)
从你的shell(即命令行)
$> set REMOTE_ADDR=<some url>
$> python
>>> import os
>>> print os.environ['REMOTE_ADDR']
<some url>
如果你在python实例中定义它,它只适用于那个实例
但是通过放入&#39;环境&#39;在致电任何模块之前,它是全球性的。可用