运行 python shebang 使用 `time` 命令编写的脚本
Run python script by shebang with `time` command
我有一个 python 脚本,我希望能够从 bash.
运行
shebang简单解决了这个问题
下一步是将时间命令执行到 shebang 中。
我最好但不是完全成功的想法是使用
#!/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
hello
real 0m0.028s
user 0m0.016s
sys 0m0.000s
Kamori@Kamori-PC:/tmp# cat timed.py
#!/bin/bash startup.sh
print("hello")
Kamori@Kamori-PC:/tmp# cat startup.sh
#!/usr/bin/env bash
time python3.7 timed.py
你不能用 shebang 做到这一点,因为它的格式 (on Linux) 是:
#!interpreter [optional-arg]
并且此参数作为单个字符串传递(请参阅链接文档中的 "Interpreter scripts" 和 "Interpreter scripts")。换句话说,您不能将多个参数(除非它们可以连接成一个字符串)传递给解释器。这取决于代码如何执行的内核实现。
使用 env -S
在这里也没有帮助,因为正如您在调试输出中看到的那样:
arg[0]= ‘bash’
arg[1]= ‘-c’
arg[2]= ‘time /usr/bin/python3 -OO’
arg[3]= ‘./mypycheck.py’
它运行s shell,告诉运行一个命令(-c
)开始python包裹在time
然后通过‘./mypycheck.py’
到 bash(不是 python)作为它的最后一个参数。其中的含义是(应用于bash):
-c
If the -c
option is present, then commands are read from the first non-option argument command_string
. If there are arguments after the command_string
, the first argument is assigned to [=20=]
and any remaining arguments are assigned to the positional parameters. The assignment to [=20=]
sets the name of the shell, which is used in warning
and error messages.
至于你objective。您可以创建一个包装器,用作解释器代替 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
最后从这里总结了所有有用的细节,我能够通过以下解决方案实现我的目标。
- 安装
time
实用程序 运行 sudo apt install time
- 使用 shebang
#!/usr/bin/env -S /usr/bin/time /usr/bin/python3 -OO
现在一切都是 运行 我一直在寻找的方式。
我有一个 python 脚本,我希望能够从 bash.
运行
shebang简单解决了这个问题
下一步是将时间命令执行到 shebang 中。
我最好但不是完全成功的想法是使用
#!/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
hello
real 0m0.028s
user 0m0.016s
sys 0m0.000s
Kamori@Kamori-PC:/tmp# cat timed.py
#!/bin/bash startup.sh
print("hello")
Kamori@Kamori-PC:/tmp# cat startup.sh
#!/usr/bin/env bash
time python3.7 timed.py
你不能用 shebang 做到这一点,因为它的格式 (on Linux) 是:
#!interpreter [optional-arg]
并且此参数作为单个字符串传递(请参阅链接文档中的 "Interpreter scripts" 和 "Interpreter scripts")。换句话说,您不能将多个参数(除非它们可以连接成一个字符串)传递给解释器。这取决于代码如何执行的内核实现。
使用 env -S
在这里也没有帮助,因为正如您在调试输出中看到的那样:
arg[0]= ‘bash’
arg[1]= ‘-c’
arg[2]= ‘time /usr/bin/python3 -OO’
arg[3]= ‘./mypycheck.py’
它运行s shell,告诉运行一个命令(-c
)开始python包裹在time
然后通过‘./mypycheck.py’
到 bash(不是 python)作为它的最后一个参数。其中的含义是(应用于bash):
-c
If the
-c
option is present, then commands are read from the first non-option argumentcommand_string
. If there are arguments after thecommand_string
, the first argument is assigned to[=20=]
and any remaining arguments are assigned to the positional parameters. The assignment to[=20=]
sets the name of the shell, which is used in warning and error messages.
至于你objective。您可以创建一个包装器,用作解释器代替 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
最后从这里总结了所有有用的细节,我能够通过以下解决方案实现我的目标。
- 安装
time
实用程序 运行sudo apt install time
- 使用 shebang
#!/usr/bin/env -S /usr/bin/time /usr/bin/python3 -OO
现在一切都是 运行 我一直在寻找的方式。