使用`time`命令通过shebang运行python脚本

时间:2019-09-28 08:21:33

标签: 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:    ‘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)

我该怎么做?预先感谢。

4 个答案:

答案 0 :(得分:1)

您可以通过创建辅助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

答案 1 :(得分:1)

您不能使用shebang来执行此操作,因为它的格式(on Linux)为:

#!interpreter [optional-arg]

此参数作为单个字符串传递(请参阅链接文档中的“解释器脚本”和“解释器脚本”)。换句话说,您不能将多个参数(除非可以将它们串联为单个字符串)传递给解释器。这取决于内核如何执行代码。

在这里使用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_string读取命令。如果command_string之后有参数,则将第一个参数分配给$0,并将其余所有参数分配给位置参数。对$0的分配设置了外壳的名称,该名称用于警告    和错误消息。

至于你的目标。在您的情况下,您可以创建一个包装来用作解释器,以代替env并执行所需的操作并将脚本传递给实际的解释器。

答案 2 :(得分:1)

我想你已经尝试过了

RewriteCond %{REQUEST_URI} !^/wp-admin($|/)
RewriteCond %{REQUEST_URI} !^/wp-login.php$
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteCond %{REQUEST_URI} !^/sitemap_index.xml$
RewriteRule (.*) https://www.newdomain.com/$1 [R=301,L]

这还行吗? (即测试中的#!/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

答案 3 :(得分:1)

最后总结了所有有用的细节,下面的解决方案使我得以实现。

  1. 通过运行time安装sudo apt install time实用程序
  2. 使用shebang #!/usr/bin/env -S /usr/bin/time /usr/bin/python3 -OO

现在一切都按照我想要的方式运行。