0

我一直在网上搜索这个问题的答案。请不要我的 python 编码技能不是那么好。我正在尝试创建一个命令行脚本,它将从命令行获取输入,如下所示:

$python GetHostID.py serverName.com   

最后一部分是我想作为变量传递给 socket.gethostbyaddr("") 模块的内容。这是我到目前为止的代码。有人可以帮我弄清楚如何将该变量放入(“”)中。我认为“”在使用简单变量名时会产生问题,因为它试图将其视为与变量名相对应的文本字符串。这是我的脚本中的代码:

#!/bin/python
# 
import sys, os
import optparse
import socket


remoteServer = input("Enter a remote host to scan: ")
remoteServerIP  = socket.gethostbyaddr(remoteServer)
socket.gethostbyaddr('remoteServer')[0]
os.getenv('remoteServer')
print (remoteServerIP)

欢迎任何帮助。我一直在为此绞尽脑汁……谢谢

4

4 回答 4

1

命令行参数可用作 list sys.argv,其第一个元素是程序的路径。您可以使用许多库(argparse、optparse 等)来分析命令行,但对于您的简单应用程序,您可以执行以下操作:

import sys
import sys, os
import optparse
import socket
remoteServer = sys.argv[1]
remoteServerIP = socket.gethostbyaddr(remoteServer)
print (remoteServerIP)

用命令行运行这个程序

$ python GetHostID.py holdenweb.com

给出输出

('web105.webfaction.com', [], ['108.59.9.144'])
于 2016-08-01T16:32:10.970 回答
0

在 Python 2 中,input读取文本并将其计算为当前上下文中的 Python 表达式。这几乎不是你想要的;你想要raw_input的。但是,在 Python 3 中,input执行raw_input版本 2 中的操作,并且raw_input不可用。

所以,如果你需要你的代码在 Python 2 和 3 中工作你应该在你的 imports 块之后做这样的事情:

# Apply Python 3 semantics to input() if running under v2.
try:
    input = raw_input
    def raw_input(*a, **k):
        raise NameError('use input()')
except NameError:
    pass

这在 Python 3 中没有效果,但在 v2 中,它用 , 和一个总是抛出异常的函数替换了 stock inputraw_input所以raw_input你会注意到如果你不小心使用了raw_input)。

如果您发现自己需要消除 v2 和 v3 之间的许多差异,python-future库可能会让您的生活更轻松。

于 2016-08-01T16:54:33.747 回答
0

你可以使用sys.argv

为了

$python GetHostID.py serverName.com  

sys.argv将会

['GetHostID.py', 'serverName.com'] 

但为了对用户友好,请查看argparse 教程

于 2016-08-01T16:31:04.170 回答
0

os.getenv('remoteserver') 不使用变量 remoteserver 作为参数。相反,它使用字符串“remoteserver”。

另外,您是否尝试将输入作为命令行参数?或者您是否试图将其作为用户输入?您的问题描述和实现在这里有所不同。最简单的方法是使用

python GetHostID.py

然后在你的代码中包括

remoteServer = raw_input().strip().split()

获取远程服务器所需的输入。

于 2016-08-01T16:28:53.990 回答