【问题标题】:Running a Python project in PyCharm在 PyCharm 中运行 Python 项目
【发布时间】: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 中的控制台在哪里?我无法在代码下方的空白处输入任何内容(我假设它是一个控制台)。
  • 它没有做任何事情,因为我假设当你运行它时你没有传递所需的参数.. 因为你想在 pycharm 上运行这个脚本,所以看看这个 SO answer on how to :linklink2
  • @Hamza Haider,好的,但是如何让它作为应用程序工作呢?用户不会输入参数,他/她将使用简化的界面(或本例中的控制台)。如何为简单用户启用此功能?

标签: python pycharm


【解决方案1】:

只需右键单击文件并点击运行 或者 在 PyCharm 编辑器中,查看编辑器右侧并找到运行符号,您会发现运行符号左侧有一个框,在该框中您必须选择要执行的文件名,如您的案例选择 wrapper.py 并点击 Run Symbol。

【讨论】:

  • 我解释说这没有任何作用。
  • 您应该删除 in 语句并尝试运行 main() 以开始执行,您可以跟踪您的程序流程,在您的情况下您的 main() 不会执行,所以让它先发生。
猜你喜欢
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多