我一直在网上寻找答案。请不要我的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)
欢迎任何帮助。我一直在绞尽脑汁...... 谢谢
答案 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库可能会让您的生活更轻松。