相关疑难解决方法(0)

'b'字符在字符串文字前面做了什么?

显然,以下是有效的语法

my_string = b'The string'
Run Code Online (Sandbox Code Playgroud)

我想知道:

  1. 这是什么b字在前面的字符串是什么意思?
  2. 使用它有什么影响?
  3. 使用它的适当情况是什么?

我在SO上找到了一个相关的问题,但是这个问题是关于PHP的,它表示b用于表示字符串是二进制的,而不是Unicode,这是代码与PHP版本兼容所需的代码<6 ,当迁移到PHP 6.我不认为这适用于Python.

我确实在Python网站上找到了关于使用相同语法的字符将字符串指定为Unicode的文档u.不幸的是,它没有提到该文档中任何地方的b字符.

而且,只是出于好奇,有没有比多符号bu是做其他事情?

python string unicode binary

724
推荐指数
10
解决办法
49万
查看次数

将subprocess.Popen调用的输出存储在字符串中

我正在尝试用Python进行系统调用,并将输出存储到我可以在Python程序中操作的字符串中.

#!/usr/bin/python
import subprocess
p2 = subprocess.Popen("ntpq -p")
Run Code Online (Sandbox Code Playgroud)

我尝试了一些事情,包括一些建议:

检索subprocess.call()的输出

但没有任何运气.

python subprocess

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

清除Python中的终端

是否存在任何标准的"自带电池"方法来清除Python脚本中的终端屏幕,还是我必须去诅咒(库,而不是单词)?

python terminal

175
推荐指数
12
解决办法
31万
查看次数

检查CalledProcessError的输出

我正在使用pythons子进程模块中的subprocess.check_output来执行ping命令.我是这样做的:

output = subprocess.check_output(["ping","-c 2 -W 2","1.1.1.1")
Run Code Online (Sandbox Code Playgroud)

它引发了一个CalledProcessError,并说输出是函数的参数之一.任何人都可以帮我如何阅读该输出.我想将输出读入一个字符串并解析它.例如,如果ping返回,请说

100%丢包

我需要抓住它.如果有任何其他更好的方法..请建议.谢谢.

python subprocess

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

subprocess.call()和subprocess.Popen()之间的区别是什么使PIPE对前者不太安全?

我已经看过他们两个的文档了.

这个问题是由JF在这里的评论提示的:检索subprocess.call()的输出

当前的Python文档subprocess.call()说明了以下关于使用PIPE的内容subprocess.call():

注意请勿使用stdout=PIPEstderr=PIPE使用此功能.子进程将阻塞它是否为管道生成足够的输出以填充OS管道缓冲区,因为没有读取管道.

Python 2.7 subprocess.call():

注意请勿使用stdout=PIPEstderr=PIPE使用此功能,因为它可能会基于子进程输出量死锁.需要管道时,使用Popen和communic()方法.

Python 2.6不包含此类警告.

此外,subprocess.call()subprocess.check_call()似乎并不有一种方法来访问他们的输出,除了使用标准输出=管与沟通():

https://docs.python.org/2.6/library/subprocess.html#convenience-functions

请注意,如果要将数据发送到进程stdin,则需要使用创建Popen对象stdin=PIPE.同样,要在结果元组中获取除None之外的任何内容,您需要给出stdout=PIPE和/或stderr=PIPE过.

https://docs.python.org/2.6/library/subprocess.html#subprocess.Popen.communicate

之间有什么区别subprocess.call(),并subprocess.Popen()PIPE不够安全subprocess.call()

更具体:为什么subprocess.call() "基于子进程输出量的死锁".,不是Popen()吗?

python subprocess popen python-2.6 python-2.7

15
推荐指数
1
解决办法
9795
查看次数

Python:从subprocess.call捕获stdout

我在使用Python执行shell cmd时尝试做两件事:

  • 捕获标准输出并在发生时将其打印出来
  • 捕获整个stdout并在cmd完成时处理它

我看了一下subprocess.check_output,但它没有stdout参数,可以让我在输出时打印输出.

所以在看完这个问题后,我意识到我可能需要尝试不同的方法.

from subprocess import Popen, PIPE

process = Popen(task_cmd, stdout = PIPE)
stdout, stderr = process.communicate()

print(stdout, stderr)
Run Code Online (Sandbox Code Playgroud)

这种方法的问题在于根据文档,Popen.communicate():

从stdout和stderr读取数据,直到达到文件结尾.等待进程终止

我似乎仍然无法将输出重定向到stdout和某种缓冲区,可以在命令完成时解析.

理想情况下,我喜欢这样的东西:

# captures the process output and dumps it to stdout in realtime
stdout_capture = Something(prints_to_stdout = True)
process = Popen(task_cmd, stdout = stdout_capture)

# prints the entire output of the executed process
print(stdout_capture.complete_capture)
Run Code Online (Sandbox Code Playgroud)

有没有推荐的方法来实现这一目标?

python

6
推荐指数
1
解决办法
1468
查看次数

子进程在docker容器中不起作用

我真的疯了,拔掉我的头发,因为我似乎无法解决这个特殊的问题.

所以这就是问题:我有两个容器:Django和芹菜.用户上传word文档,芹菜工作者将该word文档转换为pdf并上传到s3存储桶.我正在用libreoffice --headless它来转换它.因此,用户将文件发送到API端点,并将word文档保存在名为originalcelery 的文件夹中,convert_office_to_pdf.delay该文件需要转换文件并将其放入另一个文件夹中converted.除芹菜功能外,一切都按预期工作.这是代码的样子:

import subprocess    
def convert_office_to_pdf(original_file):
    ws = websocket.WebSocket()
        ws.connect('ws://web:8000/ws/converter/public/')
    #how the command will look like
        print('libreoffice --headless --convert-to pdf original/{} --outdir ./converted'.format(original_file))
        subprocess.call('libreoffice --headless --convert-to pdf original/{} --outdir ./converted'.format(original_file), shell=True)
     ws.send(json.dumps({
            'message': '{}.pdf'.format(pure_file_name), 
            'progress': 75}))
        upload_file_to_s3(pure_file_name, 'pdf', ws)
Run Code Online (Sandbox Code Playgroud)

但是,函数get已执行且没有任何反应.这是输出docker-compose

web_1       | [2018/03/22 22:57:52] HTTP GET /converter/ 200 [0.06, 172.17.0.1:32788]
web_1       | [2018/03/22 22:57:52] HTTP GET /static/css/normalize.css 304 [0.02, 172.17.0.1:32788]
web_1       | [2018/03/22 22:57:52] WebSocket HANDSHAKING /ws/converter/public/ [172.17.0.1:32798]
web_1 …
Run Code Online (Sandbox Code Playgroud)

python django celery libreoffice docker

6
推荐指数
1
解决办法
1307
查看次数

打印subprocess.call结果

我试图用"Temp:"作为前缀在一个字符串中返回我的驱动器的温度.为此,我运行一个简单的脚本,用于将字符串与命令的输出连接起来.

import subprocess

command = "sudo smartctl -A /dev/sda | egrep Temperature_Celsius | awk '{print $10}'"

print "Temp " + str(subprocess.call(command, shell=True))
Run Code Online (Sandbox Code Playgroud)


结果:

29
Temp 0
Run Code Online (Sandbox Code Playgroud)


当我删除'print'行时,'29'也没有显示.因此,当我使用print语句时,脚本由于某种原因(?!)返回'29'然后返回0,而29实际上是正确的值.

我希望我能得到这个:

Temp: 29
Run Code Online (Sandbox Code Playgroud)

我试图使用os.system,并给出相同的结果.我也尝试将命令直接添加到"command = str(subprocess.call("但它给出了相同的结果.我已经阅读了os.system info页面和subprocess.call信息页面,我没有找到然后我用谷歌搜索AWK命令,也许它创建了一些疯狂的输出,但我找不到任何有用的东西.

Linux 2.7上的Python 2.7.0-34-通用#49-Ubuntu SMP Tue 11月12日18:00:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

python subprocess python-2.7

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

运行嵌入在HTML上的Python脚本

我正在尝试运行嵌入了HTML代码的Python脚本,但无法正常工作。我想执行一个Python脚本,并同时渲染将由该脚本打印的HTML。

app.py

#!/usr/bin/python2.6
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/briefing')
def briefing():
    return render_template('briefing.html')

@app.route('/briefing/code')
def app_code():
    return render_template('app_code.py')

if __name__ == '__main__':
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

app_code.py

http://i.stack.imgur.com/sIFFJ.png

当我访问http://127.0.0.1:5000/briefing/code结果为http://i.stack.imgur.com/iEKv2.png

我知道发生的事情是我正在以HTML形式呈现,因此文件内的Python代码没有被解释。

如何运行,app_code.py并同时从中渲染HTML?

html python flask

3
推荐指数
1
解决办法
5295
查看次数