相关疑难解决方法(0)

为什么要使用def main()?

可能重复:
if __name__== "__main__"什么?

我见过一些使用的代码示例和教程

def main():
    # my code here

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

但为什么?是否有任何理由不在文件顶部定义您的函数,然后只在其下编写代码?即

def my_function()
    # my code here

def my_function_two()
    # my code here

# some code
# call function
# print(something)
Run Code Online (Sandbox Code Playgroud)

我只是想知道主要有没有押韵?

python coding-style

545
推荐指数
5
解决办法
69万
查看次数

如何让一个python文件运行另一个?

如何制作一个python文件来运行另一个?

例如,我有两个.py文件.我想要运行一个文件,然后让它运行另一个.py文件.

python

274
推荐指数
6
解决办法
53万
查看次数

如何检测脚本是否来源

我有一个脚本,exit如果它被采购我不希望它调用.

我想过检查是否$0 == bash但如果脚本来自另一个脚本,或者如果用户从不同的shell中获取它,则会出现问题ksh.

是否有可靠的方法来检测脚本是否来源?

bash ksh

188
推荐指数
9
解决办法
5万
查看次数

为什么Python在导入时会运行我的模块,如何阻止它?

我有一个我正在构建的Python程序,它可以用以下两种方式之一运行:第一种是调用"python main.py",它以友好的方式提示用户输入,然后通过程序运行用户输入.另一种方法是调用"python batch.py -file- ",它将通过所有友好的输入收集并通过程序一次性运行整个文件的输入值.

问题是,当我运行"batch.py​​"时,它会从"main.py"导入一些变量/方法/ etc,并在运行此代码时:

import main
Run Code Online (Sandbox Code Playgroud)

在程序的第一行,它立即出错,因为它试图在"main.py"中运行代码.

如何阻止Python运行我正在导入的"main"模块中包含的代码?

python module python-import

150
推荐指数
5
解决办法
13万
查看次数

理解python的主要方法

我是Python新手,但我有其他OOPS语言的经验.我的课程没有解释python中的主要方法.

请告诉我python中main方法的工作原理?我很困惑,因为我试图将它与Java进行比较.

def main():
# display some lines

if __name__ == "__main__": main()
Run Code Online (Sandbox Code Playgroud)

主要如何执行,为什么我需要这个奇怪if的执行main.当我删除时,我的代码终止而没有输出if.

最小的代码 -

class AnimalActions:
    def quack(self): return self.strings['quack']
    def bark(self): return self.strings['bark']

class Duck(AnimalActions):
    strings = dict(
        quack = "Quaaaaak!",
        bark = "The duck cannot bark.",
    )


class Dog(AnimalActions):
    strings = dict(
        quack = "The dog cannot quack.",
        bark = "Arf!",
    )

def in_the_doghouse(dog):
    print(dog.bark())

def in_the_forest(duck):
    print(duck.quack())

def main():
    donald = Duck()
    fido = Dog()

    print("- In the forest:") …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

146
推荐指数
4
解决办法
35万
查看次数

如何在Python中创建一个简单的消息框?

我正在寻找与alert()JavaScript 相同的效果.

我今天下午用Twisted.web写了一个简单的基于网络的翻译.你基本上通过一个表单提交一个Python代码块,然后客户端来抓取它并执行它.我希望能够制作一个简单的弹出消息,而不必每次都重写一大堆样板wxPython或TkInter代码(因为代码通过表单提交然后消失).

我试过tkMessageBox:

import tkMessageBox
tkMessageBox.showinfo(title="Greetings", message="Hello World!")
Run Code Online (Sandbox Code Playgroud)

但这会在背景中打开另一个带有tk图标的窗口.我不想要这个.我正在寻找一些简单的wxPython代码,但它总是需要设置一个类并进入一个应用程序循环等.在Python中没有简单,无需捕获的方法来制作消息框吗?

python wxpython tkinter

98
推荐指数
9
解决办法
29万
查看次数

在Python中,我可以调用导入模块的main()吗?

在Python中我有一个模块 myModule.py,我在其中定义了一些函数和一个main(),它接受一些命令行参数.

我通常从bash脚本中调用main().现在,我想将所有内容放入一个小包中,所以我想也许我可以将我的简单bash脚本转换为Python脚本并将其放入包中.

那么,我如何 MyFormerBashScript.py 的main()函数实际调用 myModule.py 的main()函数?我甚至可以这样做吗?我如何传递任何参数

python program-entry-point arguments module

70
推荐指数
4
解决办法
8万
查看次数

FastAPI 以串行方式而不是并行方式运行 api 调用

我有以下代码:

import time
from fastapi import FastAPI, Request
    
app = FastAPI()
    
@app.get("/ping")
async def ping(request: Request):
        print("Hello")
        time.sleep(5)
        print("bye")
        return {"ping": "pong!"}
Run Code Online (Sandbox Code Playgroud)

如果我在本地主机上运行我的代码 - 例如http://localhost:8501/ping- 在同一浏览器窗口的不同选项卡中,我得到:

Hello
bye
Hello
bye
Run Code Online (Sandbox Code Playgroud)

代替:

Hello
Hello
bye
bye
Run Code Online (Sandbox Code Playgroud)

我已经阅读过有关使用的内容httpx,但仍然无法实现真正​​的并行化。有什么问题?

python asynchronous concurrent-processing python-asyncio fastapi

50
推荐指数
1
解决办法
4万
查看次数

为什么Flask应用程序在Gunicorn托管时不会创建任何日志?

我正在尝试将日志记录添加到使用Flask的Web应用程序.

使用内置服务器(即python3 server.py)托管时,日志记录有效.使用Gunicorn托管时,不会创建日志文件.

重现问题的最简单的代码是这样的:

#!/usr/bin/env python

import logging
from flask import Flask
flaskApp = Flask(__name__)


@flaskApp.route('/')
def index():
    flaskApp.logger.info('Log message')
    print('Direct output')
    return 'Hello World\n'


if __name__ == "__main__":
    logHandler = logging.FileHandler('/var/log/demo/app.log')
    logHandler.setLevel(logging.INFO)
    flaskApp.logger.addHandler(logHandler)
    flaskApp.logger.setLevel(logging.INFO)
    flaskApp.run()
Run Code Online (Sandbox Code Playgroud)

该应用程序使用:

gunicorn server:flaskApp -b :80 -w 4
    --access-gfile /var/log/demo/access.log
    --error-logfile /var/log/demo/error.log
Run Code Online (Sandbox Code Playgroud)

在对网站主页发出请求时,会发生以下情况:

  1. 我收到了预期的HTTP 200"Hello World \n"作为响应.

  2. 有一丝请求/var/log/demo/access.log.

  3. /var/log/demo/error.log 保持不变(只有引导事件).

  4. 终端中有"直接输出"线.

  5. 没有'/var/log/demo/app.log'.如果我在启动应用程序之前创建文件,则不会修改该文件.

注意:

  • 每个人/var/log/demo都可以访问(读,写,执行)目录,因此这不是权限问题.

  • 如果我添加StreamHandler为第二个处理程序,则终端和Gunicorn日志文件中仍然没有"日志消息"消息的痕迹.

  • Gunicorn是使用安装的pip3 install gunicorn,所以不应该与Python版本有任何不匹配.

发生了什么?

python logging flask gunicorn

40
推荐指数
3
解决办法
3万
查看次数

将jupyter笔记本变成python脚本的最佳实践

Jupyter(iPython)笔记本当之无愧地被认为是一个很好的工具,用于对代码进行原型设计并以交互方式进行各种机器学习.但是当我使用它时,我不可避免地遇到以下问题:

  • 笔记本电脑很快就变得过于复杂和混乱而无法进行维护和改进,而且我必须制作python脚本;
  • 当涉及到生产代码(例如每天需要重新运行的代码)时,笔记本电脑再次不是最好的格式.

假设我在jupyter中开发了一个整机学习管道,包括从各种来源获取原始数据,清理数据,特征工程和培训模型.现在用高效可读的代码从中制作脚本的最佳逻辑是什么?到目前为止,我曾经用几种方法解决它:

  1. 只需将.ipynb转换为.py,只需稍加修改,就可以将笔记本中的所有管道硬编码为一个python脚本.

    • '+':快
    • ' - ':脏,不灵活,维护不方便
  2. 制作一个包含许多函数的单个脚本(对于每一个或两个单元格大约有1个函数),尝试使用单独的函数组成管道的各个阶段,并相应地命名它们.然后通过指定所有参数和全局常量argparse.

    • '+':使用更灵活; 更可读的代码(如果您正确地将管道逻辑转换为函数)
    • ' - ':通常情况下,管道不能拆分成逻辑上完成的部分,这些部分可以成为函数而代码中没有任何怪癖.所有这些函数通常只需要在脚本中调用一次,而不是在循环,映射等内多次调用.此外,每个函数通常都会获取之前调用的所有函数的输出,因此必须将多个参数传递给每个函数.功能.
  3. 与point(2)相同,但现在将所有函数包装在类中.现在,所有全局常量以及每个方法的输出都可以存储为类属性.

    • '+':您不需要为每个方法传递许多参数 - 所有以前的输出都已存储为属性
    • ' - ':任务的整体逻辑仍未被捕获 - 它是数据和机器学习管道,而不仅仅是类.该类的唯一目标是创建,逐个调用所有方法,然后删除.除此之外,课程实施起来还很长.
  4. 使用多个脚本将笔记本转换为python模块.我没有试过这个,但我怀疑这是解决这个问题的最长方法.

我想,这种整体设置在数据科学家中非常普遍,但令人惊讶的是我无法找到任何有用的建议.

伙计们,请分享您的想法和经验.你有没有遇到过这个问题?你是怎么解决它的?

python refactoring readability ipython-notebook jupyter

37
推荐指数
2
解决办法
8503
查看次数