显然,以下是有效的语法
my_string = b'The string'
Run Code Online (Sandbox Code Playgroud)
我想知道:
b字在前面的字符串是什么意思?我在SO上找到了一个相关的问题,但是这个问题是关于PHP的,它表示b用于表示字符串是二进制的,而不是Unicode,这是代码与PHP版本兼容所需的代码<6 ,当迁移到PHP 6.我不认为这适用于Python.
我确实在Python网站上找到了关于使用相同语法的字符将字符串指定为Unicode的文档u.不幸的是,它没有提到该文档中任何地方的b字符.
而且,只是出于好奇,有没有比多符号b和u是做其他事情?
我正在尝试用Python进行系统调用,并将输出存储到我可以在Python程序中操作的字符串中.
#!/usr/bin/python
import subprocess
p2 = subprocess.Popen("ntpq -p")
Run Code Online (Sandbox Code Playgroud)
我尝试了一些事情,包括一些建议:
但没有任何运气.
是否存在任何标准的"自带电池"方法来清除Python脚本中的终端屏幕,还是我必须去诅咒(库,而不是单词)?
我正在使用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%丢包
我需要抓住它.如果有任何其他更好的方法..请建议.谢谢.
我已经看过他们两个的文档了.
这个问题是由JF在这里的评论提示的:检索subprocess.call()的输出
当前的Python文档subprocess.call()说明了以下关于使用PIPE的内容subprocess.call():
注意请勿使用
stdout=PIPE或stderr=PIPE使用此功能.子进程将阻塞它是否为管道生成足够的输出以填充OS管道缓冲区,因为没有读取管道.
Python 2.7 subprocess.call():
注意请勿使用
stdout=PIPE或stderr=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执行shell 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)
有没有推荐的方法来实现这一目标?
我真的疯了,拔掉我的头发,因为我似乎无法解决这个特殊的问题.
所以这就是问题:我有两个容器: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) 我试图用"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
我正在尝试运行嵌入了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?
python ×9
subprocess ×4
python-2.7 ×2
binary ×1
celery ×1
django ×1
docker ×1
flask ×1
html ×1
libreoffice ×1
popen ×1
python-2.6 ×1
string ×1
terminal ×1
unicode ×1