Python3:从cli运行时找不到命令

时间:2015-01-11 12:00:52

标签: python regex python-3.x

我正在尝试将我的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__":

但是我无法弄明白,这对我来说是一个新领域,而且有点压力。

2 个答案:

答案 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/python3env

另外,请确保您的文件可执行:chmod +x my_module.py并尝试使用./my_module.py运行。