在另一个文件中使用REMOTE_ADDR

时间:2014-07-23 14:01:44

标签: python html client-server global-variables cgi

我在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地址

请帮帮我:(

2 个答案:

答案 0 :(得分:1)

您的代码存在多个问题。

首先,正如您previous question中提到的那样:

  

(我重申:你)想要客户端的IP作为网址   你的表格的行动

您认为这行代码到底会发生什么?

<form name="sD" method="get" action="${addr}">

它会尝试将表单发送给最终用户的IP地址。 这会失败。这会失败,因为

  • 他们可能没有运行网络服务器
  • 即使他们这样做,他们也可能没有为处理您的表单而构建的脚本
  • 您应该将表单提交到您控制的页面,以便您可以处理它

至于您丢失的密钥错误,您没有设置环境变量。您可以通过以下几种方式实现这一目标:

  • 在您的python脚本之外,使用此命令:set REMOTE_ADDR=<value>。将<value>替换为适当的值。
  • 从您的python脚本中的 ,使用此代码

请记住导入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;在致电任何模块之前,它是全球性的。可用