通过shebang使用'time'命令运行python脚本
我有一个python脚本,我希望能够从bash运行该脚本。通过shebang使用'time'命令运行python脚本,python,bash,time,shebang,Python,Bash,Time,Shebang,我有一个python脚本,我希望能够从bash运行该脚本。 shebang很简单地解决了这个问题。 下一步是在shebang中实现time命令。 我最好但并非完全成功的想法是使用 #!/usr/bin/env -vS bash -c "time /usr/bin/python3 -OO" 遗憾的是,这并没有让python解释脚本文件,而是以一个交互式python会话结束 输出是 split -S: ‘bash -c "time /usr/bin/python3 -OO"’ into:
shebang很简单地解决了这个问题。
下一步是在shebang中实现time命令。
我最好但并非完全成功的想法是使用
#!/usr/bin/env -vS bash -c "time /usr/bin/python3 -OO"
遗憾的是,这并没有让python解释脚本文件,而是以一个交互式python会话结束
输出是
split -S: ‘bash -c "time /usr/bin/python3 -OO"’
into: ‘bash’
& ‘-c’
& ‘time /usr/bin/python3 -OO’
executing: bash
arg[0]= ‘bash’
arg[1]= ‘-c’
arg[2]= ‘time /usr/bin/python3 -OO’
arg[3]= ‘./mypycheck.py’
Python 3.7.3 (default, Apr 3 2019, 05:39:12)
我怎样才能做这项工作?提前感谢。您可以通过创建一个辅助bash脚本并将其作为shebang调用来解决这个问题
Kamori@Kamori-PC:/tmp#/timed.py
你好
实0.028s
用户0m0.016s
系统0m0.000s
Kamori@Kamori-PC:/tmp#cat timed.py
#!/bin/bash startup.sh
打印(“你好”)
Kamori@Kamori-PC:/tmp#cat startup.sh
#!/usr/bin/env bash
时间蟒蛇3.7 timed.py
你不能用shebang来做这件事,因为它的格式()是:
此参数作为单个字符串传递(请参阅链接文档中的“解释器脚本”和“解释器脚本”)。换句话说,您不能将多个参数(除非它们可以连接到单个字符串)传递给解释器。这取决于代码执行方式的内核实现
在这里使用env-S
也没有帮助,因为您可以在调试输出中看到:
arg[0]= ‘bash’
arg[1]= ‘-c’
arg[2]= ‘time /usr/bin/python3 -OO’
arg[3]= ‘./mypycheck.py’
它运行shell,告诉运行一个命令(-c
),启动用time
包装的python,然后将'./mypycheck.py'
作为其最后一个参数传递给bash(不是python)。其含义是(适用于bash):
-c
如果存在-c
选项,则从第一个非选项参数command\u string
读取命令。如果命令字符串
后有参数,则第一个参数将分配给$0
,其余参数将分配给位置参数。对$0
的赋值设置shell的名称,该名称用于警告
和错误消息
至于你的目标。您可以创建一个包装器,作为解释器来代替您的案例中的
env
,该包装器执行所需的操作并将脚本传递给实际的解释器。我想您已经尝试过了
#!/usr/bin/time python3
不好吗?
(即,测试中的-OO
是强制性的吗?)
例如:
$ cat test.py
#!/usr/bin/time python3
import sys
print (sys.argv)
$ ./test.py
['./test.py']
0.01user 0.00system 0:00.02elapsed 95%CPU (0avgtext+0avgdata 9560maxresident)k
0inputs+0outputs (0major+1164minor)pagefaults 0swaps
虽然这并不能解决
-OO
问题,但在总结所有有用的细节之后,我还是能够通过以下解决方案实现我的目标
#/usr/bin/env-S/usr/bin/time/usr/bin/python3-OO
现在一切都按照我所期待的方式运行。哪些代码尝试过请分享?@AkashPagar:这当然独立于python代码。问题只是如何调用python解释器。我建议使用bash脚本来运行
time python3/path/to/file.py
,或者自己运行time./file.py
。这种方法在可移植性方面会给你带来痛苦。你能澄清一下你的问题是不是关于python脚本的计时(通过shebang,因为它看起来是可行的)?或者更多关于如何将shebang中的几个命令与env的(最近的)-s选项相结合的信息?@Demi Lune主要任务是将时间透明集成到函数中。使用bash中的time
,只需要关注粒度。计划是在每次跑步时自动进行。看来我已经找到了答案——只要再试一次,我当然会在这里发表。谢谢。这是一个好主意,但有点变通。我正在寻找一个单一的shebang解决方案。time
不是一个真正的命令,它是bash的一个特性。(对我)没有时间命令哪个时间
不返回任何内容,readingman bash
解释了这一点。有一个time bash内置(帮助时间
),并且(至少在我的debian上)还有一个/usr/bin/time
对不起,对我来说(我依赖于每个人都是一样的)在LSFW上,debian哪个时间
为空,人工时间
显示时间的详细信息。实际上,帮助时间
展示了如何使用。但是对我来说没有二进制文件。apt get install time
安装它。
$ cat test.py
#!/usr/bin/time python3
import sys
print (sys.argv)
$ ./test.py
['./test.py']
0.01user 0.00system 0:00.02elapsed 95%CPU (0avgtext+0avgdata 9560maxresident)k
0inputs+0outputs (0major+1164minor)pagefaults 0swaps