Python3: command not found, when 运行 from cli
Python3: command not found, when running from cli
我正在尝试 运行 我的 python 模块作为命令,但是我总是收到错误消息:command not found
.
#!/usr/bin/env python
import sys
import re
from sys import stdin
from sys import stdout
class Grepper(object):
def __init__(self, pattern):
self.pattern = pattern
def pgreper(self):
y = (str(self.pattern))
for line in sys.stdin:
regex = re.compile(y)
x = re.search(regex, line)
if x:
sys.stdout.write(line)
if __name__ == "__main__":
print("hello")
pattern = str(sys.argv[1])
Grepper(pattern).pgreper()
else:
print("nope")
我确定它是否与以下行有关:
if __name__ == "__main__":
然而我就是想不通,这对我来说是一个新领域,有点压力。
确保你有可执行文件:/usr/bin/env
.
当您尝试 运行 您的 python 模块作为命令时,它会将其称为解释器。如果您没有 env
命令,您可能需要将其替换为 /usr/bin/python
或 /usr/bin/python3
。
此外,请确保您的文件是可执行的:chmod +x my_module.py
并尝试 运行 它 ./my_module.py
。
您的脚本名称应该有一个 .py
扩展名,因此它应该被命名为类似于 pgreper.py
。
要运行它,你需要做python pgreper.py pattern_string
或者如果它有可执行权限,正如Gabriel所解释的,你可以做./pgreper.py pattern_string
。请注意,您必须 给出脚本路径(除非当前目录在您的命令 PATH 中); pgreper.py pattern_string
将导致 bash 打印 "command not found" 错误消息。
你不能通过管道将模式数据传递给它,IOW,cat input.txt | ./pgreper.py "pattern_string"
不会工作:模式必须是在命令行上作为参数传递。我猜你 可以 做 ./pgreper.py "$(cat input.txt)"
但如果你需要该功能,最好修改脚本以从 stdin 读取。
抱歉,我没有正确阅读您的脚本正文。 :尴尬的:
我现在看到您的 pgreper()
方法从标准输入读取数据。如果上面的段落造成任何混淆,我们深表歉意。
为我之前的失态道歉,这里是你的脚本的一个稍微干净的版本。
#! /usr/bin/env python
import sys
import re
class Grepper(object):
def __init__(self, pattern):
self.pattern = pattern
def pgreper(self):
regex = re.compile(self.pattern)
for line in sys.stdin:
if regex.search(line):
sys.stdout.write(line)
def main():
print("hello")
pattern = sys.argv[1]
Grepper(pattern).pgreper()
if __name__ == "__main__":
main()
else:
print("nope")
我正在尝试 运行 我的 python 模块作为命令,但是我总是收到错误消息:command not found
.
#!/usr/bin/env python
import sys
import re
from sys import stdin
from sys import stdout
class Grepper(object):
def __init__(self, pattern):
self.pattern = pattern
def pgreper(self):
y = (str(self.pattern))
for line in sys.stdin:
regex = re.compile(y)
x = re.search(regex, line)
if x:
sys.stdout.write(line)
if __name__ == "__main__":
print("hello")
pattern = str(sys.argv[1])
Grepper(pattern).pgreper()
else:
print("nope")
我确定它是否与以下行有关:
if __name__ == "__main__":
然而我就是想不通,这对我来说是一个新领域,有点压力。
确保你有可执行文件:/usr/bin/env
.
当您尝试 运行 您的 python 模块作为命令时,它会将其称为解释器。如果您没有 env
命令,您可能需要将其替换为 /usr/bin/python
或 /usr/bin/python3
。
此外,请确保您的文件是可执行的:chmod +x my_module.py
并尝试 运行 它 ./my_module.py
。
您的脚本名称应该有一个 .py
扩展名,因此它应该被命名为类似于 pgreper.py
。
要运行它,你需要做python pgreper.py pattern_string
或者如果它有可执行权限,正如Gabriel所解释的,你可以做./pgreper.py pattern_string
。请注意,您必须 给出脚本路径(除非当前目录在您的命令 PATH 中); pgreper.py pattern_string
将导致 bash 打印 "command not found" 错误消息。
你不能通过管道将模式数据传递给它,IOW,cat input.txt | ./pgreper.py "pattern_string"
不会工作:模式必须是在命令行上作为参数传递。我猜你 可以 做 ./pgreper.py "$(cat input.txt)"
但如果你需要该功能,最好修改脚本以从 stdin 读取。
抱歉,我没有正确阅读您的脚本正文。 :尴尬的:
我现在看到您的 pgreper()
方法从标准输入读取数据。如果上面的段落造成任何混淆,我们深表歉意。
为我之前的失态道歉,这里是你的脚本的一个稍微干净的版本。
#! /usr/bin/env python
import sys
import re
class Grepper(object):
def __init__(self, pattern):
self.pattern = pattern
def pgreper(self):
regex = re.compile(self.pattern)
for line in sys.stdin:
if regex.search(line):
sys.stdout.write(line)
def main():
print("hello")
pattern = sys.argv[1]
Grepper(pattern).pgreper()
if __name__ == "__main__":
main()
else:
print("nope")