繁体   English   中英

Python3:从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__":

但是我只是想不通,对我来说这是一个新领域,而且有点压力。

您的脚本名称应带有.py扩展名,因此应命名为pgreper.py类的pgreper.py

要运行它,您需要执行python pgreper.py pattern_string或具有可执行权限(如Gabriel所述),您可以执行./pgreper.py pattern_string 请注意,您必须提供脚本路径(除非当前目录位于命令PATH中); pgreper.py pattern_string将导致bash打印“找不到命令”错误消息。

无法通过管道,IOW, cat input.txt | ./pgreper.py "pattern_string"将模式数据传递给它cat input.txt | ./pgreper.py "pattern_string" cat input.txt | ./pgreper.py "pattern_string"将不起作用:该模式必须在命令行上作为参数传递。 我想您可以执行./pgreper.py "$(cat input.txt)"但是如果需要该功能,最好修改脚本以从stdin读取。

抱歉,我没有正确阅读脚本的正文。 :embarrassed:我现在看到您的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")

确保您在此处具有可执行文件: /usr/bin/env

当您尝试将python模块作为命令运行时,它将称为解释器。 如果没有env命令,则可能需要用/usr/bin/python/usr/bin/python3替换它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM