【发布时间】:2018-03-19 07:30:32
【问题描述】:
我有以下两个代表一个项目的PY(Python) 文件(在PyCharm 中):
antivirus.py
import requests
import json
try:
from colors import red, green
except ImportError:
def nothing(val):
return val
global red
global green
red = green = nothing
class api():
def __init__(self, verbose=False):
self.verbose = verbose
#self.api = "ASWGFHAHJGASDAGHHKHEGWARJLQGEIQYEQWIUAGHDASD"
self.api = "INSERT YOUR VIRUS TOTAL PUBLIC API HERE"
self.baseurl = "https://www.virustotal.com/vtapi/v2/"
#Print results from a file/url
def print_scan_results(self, results):
if results['response_code'] == 0:
print ("Url/file not found, or scanned yet. Try again later")
else:
print ("""Permalink: %s \nScandate: %s \n"""
% (results['permalink'], results['scan_date']))
for i in results['scans']:
print("%s: " % i),
if (str(results['scans'][i]['detected']) == "False"):
print (green("Clean"))
else:
print (red("Malicious -- %s"
% str(results['scans'][i]['result'])))
if self.verbose:
print
print (results)
#Print reply for a url scan request
def print_url_scan(self, results):
print ("""Permalink: %s \nURL: %s \nDate: %s \nID: %s"""
% (results['permalink'], results['resource'],
results['scan_date'], results['scan_id']))
if self.verbose:
print
print (results)
#Print reply for a file scan request
def print_file_scan(self, results):
print (results['verbose_msg'])
print ("Permalink: %s" % results['permalink'])
if self.verbose:
print
print (results)
#Checking if any `networking` related errors occured
def check_results(self, r):
try:
results = r.json()
except ValueError:
print ("URL not found, malformed URL or invalid API token")
exit(1)
return results
#Function to get results of a scanned file/url
def results(self, mode, resource):
url = self.baseurl + "%s/report" % mode
values = {"resource": resource,
"apikey": self.api}
r = requests.post(url, values)
results = self.check_results(r)
return results
#Scan a url
def scanurl(self, resource):
url = self.baseurl + "url/scan"
values = {"url": resource,
"apikey": self.api}
r = requests.post(url, values)
results = self.check_results(r)
return results
#Scan a file
def sendfile(self, filename):
url = self.baseurl + "file/scan"
try:
f = open(filename, "rb")
except:
print ("Could not open file")
files = {"file": f}
values = {"apikey": self.api}
r = requests.post(url, values, files=files)
results = self.check_results(r)
return results
wrapper.py
from antivirus import api
import argparse
import hashlib
def parse_options():
parser = argparse.ArgumentParser()
parser.add_argument("-u", "--url", dest="url",
help="URL to scan")
parser.add_argument("-F", "--results-file", dest="sfile",
help="Get report of previously scanned file. If the "
"given filename cannot be found/opened, we'll assume "
"it's a hash.")
parser.add_argument("-U", "--results", dest="url_res",
help="Get report of previously scanned url")
parser.add_argument("-f", "--file", dest="file",
help="Scan file")
parser.add_argument("-v", "--verbose", default=False, action="store_true",
dest="verbose", help="Print complete reply")
return parser.parse_args()
def main():
arg = parse_options()
vt = api(arg.verbose)
#Scan url
if arg.url:
vt.print_url_scan(vt.scanurl(arg.url))
#Get results of file
elif arg.sfile:
try:
f = open(arg.sfile, "r")
fhash = hashlib.sha256()
fhash.update(str(f.read()))
value = fhash.hexdigest()
except:
value = arg.sfile
vt.print_scan_results(vt.results("file", value))
#Get results of url
elif arg.url_res:
vt.print_scan_results(vt.results("url", arg.url_res))
#Send file for scan
elif arg.file:
vt.print_file_scan(vt.sendfile(arg.file))
if __name__ == "__main__":
exit(main())
当我运行其中一个文件(例如 wrapper.py)时,什么也没有发生。没有错误,但没有任何反应。
如何测试这个项目的功能?
即如何运行这个程序?
是否可以将其作为控制台应用程序运行?
另外,我无法在控制台中输入。如何启用此功能?我正在使用 Windows 7。
【问题讨论】:
-
你可以尝试从pycharm的控制台调用它(比如
python[3] project.py [-args]) -
@Ryan Schaefer,用户将如何调用应用程序?应该不复杂。
-
@Ryan Schaefer,... 另外,PyCharm 中的控制台在哪里?我无法在代码下方的空白处输入任何内容(我假设它是一个控制台)。
-
@Hamza Haider,好的,但是如何让它作为应用程序工作呢?用户不会输入参数,他/她将使用简化的界面(或本例中的控制台)。如何为简单用户启用此功能?