我有一个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)
我该怎么做?预先感谢。
答案 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)
最后总结了所有有用的细节,下面的解决方案使我得以实现。
time
安装sudo apt install time
实用程序#!/usr/bin/env -S /usr/bin/time /usr/bin/python3 -OO
现在一切都按照我想要的方式运行。