小编tre*_*der的帖子

我应该放#!(shebang)在Python脚本中,应该采用什么形式?

我应该把shebang放在我的Python脚本中吗?以什么形式?

#!/usr/bin/env python 
Run Code Online (Sandbox Code Playgroud)

要么

#!/usr/local/bin/python
Run Code Online (Sandbox Code Playgroud)

这些同样便携吗?哪种形式最常用?

注:龙卷风项目采用的家当.另一方面, Django项目没有.

python shell shebang python-3.x

741
推荐指数
10
解决办法
44万
查看次数

Nginx - 静态文件与root和别名混淆

我需要通过我的应用服务器提供我的应用程序8080,以及来自目录的静态文件,而无需触及应用服务器.我拥有的nginx配置是这样的......

    # app server on port 8080
    # nginx listens on port 8123
    server {
            listen          8123;
            access_log      off;

            location /static/ {
                    # root /var/www/app/static/;
                    alias /var/www/app/static/;
                    autoindex off;
            }


            location / {
                    proxy_pass              http://127.0.0.1:8080;
                    proxy_set_header        Host             $host;
                    proxy_set_header        X-Real-IP        $remote_addr;
                    proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;
            }
    }
Run Code Online (Sandbox Code Playgroud)

现在,使用此配置,一切正常.请注意,该root指令已被注释掉.

如果我激活root和停用alias- 它会停止工作.但是,当我/static/root它删除尾随它开始再次工作.

有人可以解释发生了什么.还请解释清楚和冗长之间有什么区别rootalias和它们的用途.

nginx

422
推荐指数
5
解决办法
22万
查看次数

拆包,扩展拆包和嵌套扩展拆包

考虑一下这些表达方式......请耐心等待...这是一个很长的清单......

(注意:重复一些表达式 - 这只是为了呈现"上下文")

a, b = 1, 2                          # simple sequence assignment
a, b = ['green', 'blue']             # list asqignment
a, b = 'XY'                          # string assignment
a, b = range(1,5,2)                  # any iterable will do


                                     # nested sequence assignment

(a,b), c = "XY", "Z"                 # a = 'X', b = 'Y', c = 'Z' 

(a,b), c = "XYZ"                     # ERROR -- too many values to unpack
(a,b), c = "XY"                      # ERROR -- need more than 1 value …
Run Code Online (Sandbox Code Playgroud)

python argument-unpacking python-3.x iterable-unpacking

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

如果我不在Python SQLite中关闭数据库连接怎么办?

我正在做这样的事......

conn = sqlite3.connect(db_filename)

with conn:
    cur = conn.cursor()
    cur.execute( ... )
Run Code Online (Sandbox Code Playgroud)

with自动提交更改.但是文档没有提到关闭连接.

实际上我可以conn在以后的陈述中使用(我已经测试过).因此,似乎上下文管理器没有关闭连接.

我是否必须手动关闭连接.如果我把它打开怎么办?

编辑

我的结论......

  • 连接不会关闭上下文管理,我已经测试并确认它.在__exit__,上下文管理器ONLY通过执行来提交更改conn.commit()
  • with conn并且with sqlite3.connect(db_filename) as conn同一件事.所以使用其中任何一个仍将使连接保持活跃
  • with 语句不会创建新范围,因此在with的套件内创建的所有变量都可以在其外部访问
  • 最后,您应该手动关闭连接

python sqlite database-connection

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

Python:与urljoin的混淆

我试图从不同的部分形成URL,并且无法理解此方法的行为.例如:

Python 3.x

from urllib.parse import urljoin

>>> urljoin('some', 'thing')
'thing'
>>> urljoin('http://some', 'thing')
'http://some/thing'
>>> urljoin('http://some/more', 'thing')
'http://some/thing'
>>> urljoin('http://some/more/', 'thing') # just a tad / after 'more'
'http://some/more/thing'
urljoin('http://some/more/', '/thing')
'http://some/thing'
Run Code Online (Sandbox Code Playgroud)

你能解释一下这种方法的确切行为吗?

python python-3.x

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

Python - 在同一个包中的模块中导入包

我有一个像这样的项目结构......

/some_app
    build/
    README
    out.py
    some_app/
        __init__.py
        mod1.py
        mod2.py
Run Code Online (Sandbox Code Playgroud)

现在我想导入some_appmod2,而不是搞乱sys.path诡计.我只是做了......

# mod2.py
import some_app
Run Code Online (Sandbox Code Playgroud)

现在,当我从命令行运行mod2.py时

some_app $ python mod2.py
Run Code Online (Sandbox Code Playgroud)

它会引发错误 ImportError: No module named some_app

但是,在out.py文件内部,当我这样做时

# out.py
import some_app.mod2
Run Code Online (Sandbox Code Playgroud)

然后呢

some_app $ python out.py
Run Code Online (Sandbox Code Playgroud)

它完美运行.

因此,正在发生的事情就是这样.我在一个模块中加载一个包在同一个包中,然后将该模块作为__main__文件运行- 它不起作用.接下来,我__main__在另一个模块中加载相同的模块(我运行的模块),然后运行另一个模块__main__- 它可以工作.

有人可以详细说明这里发生了什么吗?

UPDATE

我知道没有直接的理由这样做 - 因为我可以直接导入some_app包内的任何模块.我之所以这样做是因为,在Django项目中,这就是他们正在做的事情.例如,请参阅此文件

在每个模块中,所有非标准导入都以django..所以我想知道他们为什么以及如何做到这一点.

更新2

相关链接

python

31
推荐指数
1
解决办法
5万
查看次数

Python:避免__getattribute__中的无限循环

__getattribute__需要仔细编写该方法以避免无限循环.例如:

class A:
    def __init__(self):
        self.x = 100

    def __getattribute__(self, x):
        return self.x

>>> a = A()
>>> a.x    # infinite looop
RuntimeError: maximum recursion depth exceeded while calling a Python object


class B:
    def __init__(self):
        self.x = 100

    def __getattribute__(self, x):
        return self.__dict__[x]

>>> b = B()
>>> b.x    # infinite looop
RuntimeError: maximum recursion depth exceeded while calling a Python object
Run Code Online (Sandbox Code Playgroud)

因此我们需要以这种方式编写方法:

class C:
    def __init__(self):
        self.x = 100

    def __getattribute__(self, x):
        # 1. error
        # AttributeError: …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

25
推荐指数
3
解决办法
9945
查看次数

Redis:如何解析列表结果

我在Redis中存储一个列表,如下所示:

redis.lpush('foo', [1,2,3,4,5,6,7,8,9])
Run Code Online (Sandbox Code Playgroud)

然后我得到这样的列表:

redis.lrange('foo', 0, -1)
Run Code Online (Sandbox Code Playgroud)

我得到这样的东西:

[b'[1, 2, 3, 4, 5, 6, 7, 8, 9]']
Run Code Online (Sandbox Code Playgroud)

如何将其转换为实际的Python列表?

另外,我没有看到任何定义RESPONSE_CALLBACKS可以帮助?我错过了什么吗?

一个可能的解决方案(在我看来很糟糕)可以是:

result = redis.lrange('foo',0, -1)[0].decode()

result = result.strip('[]')

result = result.split(', ')

# lastly, if you know all your items in the list are integers
result = [int(x) for x in result]
Run Code Online (Sandbox Code Playgroud)

UPDATE

好的,所以我得到了解决方案.

实际上,该lpush函数希望所有列表项都作为参数传递,而不是作为单个列表传递.来自redis-py源的函数签名清楚地表明......

def lpush(self, name, *values):
    "Push ``values`` onto the head of the list ``name``"
    return self.execute_command('LPUSH', name, *values)
Run Code Online (Sandbox Code Playgroud)

我上面做的是发送一个列表作为参数,然后作为SINGLE项发送到redis.

我应该按照答案中的建议解压缩列表:

redis.lpush('foo', *[1,2,3,4,5,6,7,8,9])
Run Code Online (Sandbox Code Playgroud)

返回我期望的结果...... …

python redis

24
推荐指数
1
解决办法
2万
查看次数

Dockerfile:了解VOLUME指令

我们来举个例子吧.

以下是VOLUME该指令nginx的图像:

VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  1. 当您启动容器时,这些目录是否会显示在我的主机上?当我停止我的容器时,目录将保留?

  2. 如果我的主机中已存在某些(或所有)这些目录,会发生什么?例如,假设图像/etc/nginx在容器目录中附带了一个默认配置文件/etc/nginx,我的主机上也有一个配置文件.当容器启动时,哪些文件将获得优先权?

  3. -v /host/dir:container/dir和之间的关键区别是VOLUME什么?

参考文献:

docker dockerfile

22
推荐指数
1
解决办法
7897
查看次数

如何使用node.js superagent发布multipart/form-data

我试图将我的superagent post请求中的内容类型发送到multipart/form-data.

var myagent = superagent.agent();

myagent
  .post('http://localhost/endpoint')
  .set('api_key', apikey)
  .set('Content-Type', 'multipart/form-data')
  .send(fields)
  .end(function(error, response){
    if(error) { 
       console.log("Error: " + error);
    }
  });
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:TypeError:参数必须是一个字符串

如果我删除:

.set('Content-Type', 'multipart/form-data')
Run Code Online (Sandbox Code Playgroud)

我没有得到任何错误,但我的后端正在接收内容类型的请求:application/json

如何强制内容类型为multipart/form-data,以便我可以访问req.files()?

node.js superagent

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