我正在尝试将我的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__":
但是我无法弄明白,这对我来说是一个新领域,而且有点压力。
答案 0 :(得分:2)
您的脚本名称应具有.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()
方法从stdin中读取数据。对不起,如果上面的段落引起任何混淆。
通过对我之前的失态道歉,这里有一个稍微清晰的脚本版本。
#! /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")
答案 1 :(得分:0)
请确保您在此处拥有可执行文件:/usr/bin/env
。
当您尝试将python模块作为命令运行时,它会将其称为解释器。如果您没有/usr/bin/python
命令,则可能需要将其替换为/usr/bin/python3
或env
。
另外,请确保您的文件可执行:chmod +x my_module.py
并尝试使用./my_module.py
运行。