![](/img/trans.png)
[英](/bin/bash: python3: command not found) When running python script through system command in Matlab
[英]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.