Python的解释器默认启用输出缓冲sys.stdout吗?
如果答案是肯定的,那么禁用它的所有方法是什么?
建议到目前为止:
-u命令行开关sys.stdout在每次写入后刷新的对象PYTHONUNBUFFEREDenv varsys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)是否有任何其他方式来设置一些全局标志sys/ sys.stdout程序执行过程中?
在bash脚本的标题中,这两个语句之间的区别是什么?
#!/usr/bin/env bash
#!/usr/bin/bash
当我试图看到env手册页时,我得到了这个定义:
env - run a program in a modified environment
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
我想用shebang 执行一个gawk脚本--re-interval."幼稚"的方法
#!/usr/bin/gawk --re-interval -f
... awk script goes here
Run Code Online (Sandbox Code Playgroud)
不起作用,因为gawk是用第一个参数调用的"--re-interval -f"(不是在空白处分开),它不明白.有解决方法吗?
当然你可以不直接调用gawk,而是将它包装成一个分割第一个参数的shell脚本,或者创建一个shell脚本,然后调用gawk并将脚本放到另一个文件中,但我想知道是否有某种方法可以做这在一个文件中.
shebang行的行为因系统而异 - 至少在Cygwin中它不会通过空格分割参数.我只关心如何在一个行为类似的系统上做到这一点; 该脚本不是便携式的.
可能重复:
Python输出缓冲
有没有办法从我的代码中获得运行python -u的效果?如果失败了,我的程序可以检查它是否在-u模式下运行并退出并显示错误消息,如果没有?这是在linux上(ubuntu 8.10服务器)
我有一个我喜欢运行的python脚本python -i script.py,它运行脚本然后进入交互模式,以便我可以使用结果.
是否可以让脚本本身调用此选项,以便我可以运行python script.py并且脚本在运行后将进入交互模式?
当然,我可以简单地添加-i,或者如果需要付出太多努力,我可以编写一个shell脚本来调用它.
我想继续perl -w使用env.这在命令行上运行正常:
$ /bin/env perl -we 'print "Hello, world!\n"'
Hello, world!
Run Code Online (Sandbox Code Playgroud)
但它不适用于脚本中的shebang行:
#!/bin/env perl -w
print "Hello, world!\n";
Run Code Online (Sandbox Code Playgroud)
这是错误:
/bin/env: perl -w: No such file or directory
Run Code Online (Sandbox Code Playgroud)
显然env不明白-w我要传递的旗帜perl.怎么了?
I'm trying to understand one of the answers to this question:
Cannot pass an argument to python with "#!/usr/bin/env python"
#!/bin/sh
''''exec python -u -- "$0" ${1+"$@"} # '''
Run Code Online (Sandbox Code Playgroud)
This works well, but I do not understand why it works with four ticks at the beginning of that line rather than three.
In addition, why the hash near the end of that string?
人们如何处理本地和远程之间不同的shebang?
例如,我的本地python是/ usr/bin/python,而我的web主机是〜/ local/bin/python上专用的python.首席开发人员可能在/ usr/bin/ruby上有ruby,而我的是/ usr/local/bin/ruby.
我手动编辑shebang,但随后git将其标记为更改.理想情况下,我希望git忽略文件的第一行,或者忽略文件中行的正则表达式匹配.
在我看来,这一定是一个非常普遍的问题,但我找不到任何提及它.
我使用git,但我不会在任何方面称自己为专家.
我更喜欢使用哈希爆炸行来调用Ruby脚本,使用#!/bin/env ruby它可以让我使用本地Ruby安装而不与系统Ruby安装冲突。但是如何在Linux系统上启用警告?我的测试脚本:
#!/usr/bin/env ruby -w
FOO
Run Code Online (Sandbox Code Playgroud)
在Mac上,我得到:
maasha@mel:~$ ./test.rb
./test.rb:3: warning: possibly useless use of a constant in void context
./test.rb:3:in `<main>': uninitialized constant FOO (NameError)
Run Code Online (Sandbox Code Playgroud)
在Linux上,我得到:
maasha@orsted:~$ ./test.rb
/usr/bin/env: ruby -w: No such file or directory
Run Code Online (Sandbox Code Playgroud) 一般来说,我使一个nodejs文件可以直接用下面的样式执行
#/usr/bin/env node
nodejs code here
Run Code Online (Sandbox Code Playgroud)
但是,当节点0.11支持生成器时,我尝试下面
#/usr/bin/env node --harmony
nodejs code here
Run Code Online (Sandbox Code Playgroud)
它输出
/usr/bin/env: "node --harmony": No such file or directory
Run Code Online (Sandbox Code Playgroud) 我有这个非便携式的shebang:
#!/usr/bin/env python -u
Run Code Online (Sandbox Code Playgroud)
它不可移植,因为python -u它作为一个单独的arg馈送到env我的系统上.
挑战:让这个shebang便携式只改变shebang - 也就是说一个单线.
换句话说,没有解决方案