我正在寻找一个支持良好的多线程Python HTTP服务器,它支持分块编码回复.(即响应中的"转移编码:分块").为此目的,最好的HTTP服务器基础是什么?
我有一个crontab作业调用python脚本并输出到文件:
python run.py &> current_date.log
Run Code Online (Sandbox Code Playgroud)
现在有时当我这样做
tail -f current_date.log
Run Code Online (Sandbox Code Playgroud)
我看到文件填满了输出,但有时日志文件存在,但长时间保持空白.我敢肯定,python脚本正在打印东东吧它开始运行后,日志文件被创建.任何想法为什么它在某些时候保持空虚?
我在理解select.select的行为时遇到了一些麻烦.请考虑以下Python程序:
def str_to_hex(s):
def dig(n):
if n > 9:
return chr(65-10+n)
else:
return chr(48+n)
r = ''
while len(s) > 0:
c = s[0]
s = s[1:]
a = ord(c) / 16
b = ord(c) % 16
r = r + dig(a) + dig(b)
return r
while True:
ans,_,_ = select.select([sys.stdin],[],[])
print ans
s = ans[0].read(1)
if len(s) == 0: break
print str_to_hex(s)
Run Code Online (Sandbox Code Playgroud)
我已将其保存到文件"test.py".如果按如下方式调用它:
echo 'hello' | ./test.py
Run Code Online (Sandbox Code Playgroud)
然后我得到了预期的行为:选择never块并打印所有数据; 程序然后终止.
但如果我以交互方式运行程序,我会得到一个最不受欢迎的行为.请考虑以下控制台会话:
$ ./test.py
hello
[<open file '<stdin>', mode 'r' at …Run Code Online (Sandbox Code Playgroud) 当用户请求页面时,后端服务器可能需要200到500毫秒才能将HTML页面拼接在一起.在此期间,浏览器在等待数据到达时处于空闲状态.在PHP中,您有函数flush().它允许您将部分准备好的HTML响应发送到浏览器,以便浏览器可以在后端忙于HTML页面的其余部分时开始获取组件.
例:
... <!-- css, js -->
</head>
<?php flush(); ?>
<body>
... <!-- content -->
Run Code Online (Sandbox Code Playgroud)
Django/Python中是否有一个函数;它与PHP相似flush()?
谢谢
在这里的相关问题和答案中,有人假设emacs(23.2)中的python-shell是块缓冲而不是行缓冲.建议修复是将sys.stdout.flush()添加到我的脚本中的位置,我希望stdio将其内容刷新到python-shell.
有没有办法欺骗python-shell(在Windows上的emacs 23.2中运行,而不是在Linux上运行)a)认为它附加到TTY或b)使用行缓冲而不是块缓冲模式?我不明白为什么我能在IDLE中执行此操作但不能在emacs中执行此操作.
我宁愿自定义emacs而不是在我的脚本中添加sys.stdout.flush().叫我懒惰:-).
谢谢,
麦克风
我有一个SGE脚本来执行一些python代码,使用qsub提交到队列.在python脚本中,我有一些打印语句(更新程序的进度).当我从命令行运行python脚本时,print语句被发送到stdout.对于sge脚本,我使用-o选项将输出重定向到文件.但是,似乎脚本只会在python脚本运行完毕后将这些文件发送到文件中.这很烦人,因为(a)我不能再看到程序的实时更新和(b)如果我的工作没有正确终止(例如,如果我的工作被踢出队列),则不会打印任何更新.每次我想打印一些东西时,如何确保脚本正在写入文件,而不是在最后将它们全部混合在一起?
我有一个用于仿真的python脚本,一个for循环要花很长时间,每个循环要花不同的时间,因此我.在每个循环后打印一个,以监视它运行的速度和经过的时间。for脚本运行时的声明。
for something:
do something
print '.',
Run Code Online (Sandbox Code Playgroud)
但是,当我在终端中的iPython中运行脚本时,点并不会一一打印,而是在循环结束时一次打印所有点,这使整个过程变得毫无意义。如何在运行时内联打印点?
此代码按预期工作.输出:
Loading
Loading.
Loading..
Loading...
Run Code Online (Sandbox Code Playgroud)
码:
done = False
count = 0
while not done:
print '{0}\r'.format("Loading"),
time.sleep(0.25)
print '{0}\r'.format("Loading."),
time.sleep(0.25)
print '{0}\r'.format("Loading.."),
time.sleep(0.25)
print '{0}\r'.format("Loading..."),
time.sleep(0.25)
count += 1
if count == 5:
done = True
Run Code Online (Sandbox Code Playgroud)
而这段代码没有.输出:
Loading.
Loading...
Run Code Online (Sandbox Code Playgroud)
码:
done = False
count = 0
while not done:
print '{0}\r'.format("Loading"),
time.sleep(0.125)
print '{0}\r'.format("Loading."),
time.sleep(0.125)
print '{0}\r'.format("Loading.."),
time.sleep(0.125)
print '{0}\r'.format("Loading..."),
time.sleep(0.125)
count += 1
if count == 5:
done = True
Run Code Online (Sandbox Code Playgroud)
为什么时间函数似乎跳过每一个print语句,如果它低于0.25?
所以这是一些应该打印文本的代码,类似于 Pokemon 的工作方式。纯粹是为了好玩。
问题是print(x, end="")程序在终端中运行时不起作用,但在使用 IDLE 运行时运行良好。
import time
lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
for x in lorem:
print(x, end="")
time.sleep(0.03)
Run Code Online (Sandbox Code Playgroud)
出于某种原因,如果我在print(x, end="").
for x in lorem:
print()
print(x, end="")
time.sleep(0.03)
Run Code Online (Sandbox Code Playgroud)
有谁知道是什么原因造成的?也许如何解决它?
调用python程序的命令行类似于:
$ python [python_options] myprogram.py [args]
我知道我可以访问args(sys.argv),但是如何访问python_options?
我不经常使用python_options,但有时它很有用,例如-u(无缓冲输出)或-3(检查python3不兼容性).
确切地说,我想创建一个子进程,这是另一个python程序,我想传递它相同的python_options.(我知道sys.flags,但这不是我想要的.我不想要标志的值;我想要在命令行中使用的实际字符串设置这些标志).