簡體   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