Python - 如何从命令行获取输入并将其传递到socket.gethostbyaddr(“”)

时间:2016-08-01 16:08:22

标签: python sockets input gethostbyaddr

我一直在网上寻找答案。请不要我的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 个答案:

答案 0 :(得分:1)

命令行参数可用作列表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'])

答案 1 :(得分:0)

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

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

运行脚本
python GetHostID.py

然后在您的代码中包含

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

获取您想要的远程服务器输入。

答案 2 :(得分:0)

您可以使用sys.argv

$python GetHostID.py serverName.com  

sys.argv将是

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

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

答案 3 :(得分:0)

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

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

# 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中,它将库存input替换为raw_input,将raw_input替换为始终抛出异常的函数(因此,如果您注意到的话)意外使用raw_input)。

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