मैं टेक्स्ट फ़ाइल पढ़ना चाहता हूं और नीचे के टेक्स्ट में 56 से शुरू होने वाले शब्दों को ढूंढना चाहता हूं और प्रत्येक शब्द को एक चर में पास करना चाहता हूं और एक पैरामीटर के रूप में एक पायथन फ़ाइल को पास करना चाहता हूं।

मेरा नमूना पाठ फ़ाइल सामग्री -

51:40:2e:c0:01:c9:53:e8
56:c9:ce:90:4d:77:c6:03
56:c9:ce:90:4d:77:c6:07
51:40:2e:c0:01:c9:54:80
56:c9:ce:90:12:b4:19:01
56:c9:ce:90:12:b4:19:03

मैं अजगर फ़ाइल को पास करना पसंद करता हूं:

mytestfile.py var1 var2 var3 

Var1 का मान 56:c9:ce:90:4d:77:c6:03 होना चाहिए var2 का मान 56:c9:ce:90:4d:77:c6:07 होना चाहिए var3 का मान 56:c9:ce:90 होना चाहिए: 12:बी4:19:01

जल्द ही

मैंने कोड कुछ नीचे लिखा है लेकिन काम नहीं कर रहा है

[#var1 = "51:40:2e:c0:01:c9:53:e8"] [#var2 = "51:40:2e:c0:01:c9:53:ईए"]

   filepath = '/root/SDFlex/work/cookbooks/ilorest/files/file.txt'  
       with open(filepath) as fp:  
       line = fp.readline()
       cnt = 1
   while line:
       print("Line {}: {}".format(cnt, line.strip()))
       line = fp.readline()
       cnt += 1

निष्पादित करें "रन वॉल्यूम स्क्रिप्ट बनाएं" do

    command "python SDFlexnimblevolcreate.py #{var1} #{node['ilorest']['Test0']} #{var2} #{node['ilorest']['Test1']} 
    cwd "#{platformdirectory}"
    live_stream true

समाप्त

अग्रिम में धन्यवाद

-1
Ram Krishna 13 अगस्त 2018, 05:29
क्या आप सुनिश्चित हैं कि आपको mytestfile.py के लिए इस तरह से पैरामीटर पास करने की आवश्यकता है?
 – 
Lev Zakharov
13 अगस्त 2018, 05:32
मेरा मतलब mytestfile.py var1 var2 var3 var4 जैसे चर के रूप में है। मैं इसे वेरिएबल को असाइन करना चाहता हूं जो प्रत्येक मान के लिए बढ़ाना चाहिए
 – 
Ram Krishna
13 अगस्त 2018, 05:34

2 जवाब

तो यह कोड आवश्यक चर की स्ट्रिंग प्रिंट करता है:

# a.py
with open('file.txt') as f:
    result = ' '.join(map(lambda x: f'<{x}>',
                          filter(lambda x: x.startswith('56'),
                                 map(str.strip, f))))
    print(result, end='')

आउटपुट:

<56:c9:ce:90:4d:77:c6:03> <56:c9:ce:90:4d:77:c6:07> <56:c9:ce:90:12:b4:19:01> <56:c9:ce:90:12:b4:19:03>

आप इस प्रोग्राम का परिणाम xargs का उपयोग करके किसी अन्य पायथन प्रोग्राम में पास कर सकते हैं। उदाहरण के लिए यदि आपके पास सरल प्रोग्राम है जो उनके तर्कों को प्रिंट करता है:

# b.py  
import sys

print(sys.argv)

खोल में बस टाइप करने से:

python3 a.py | xargs python3 b.py

आउटपुट:

['b.py', '<56:c9:ce:90:4d:77:c6:03> <56:c9:ce:90:4d:77:c6:07> <56:c9:ce:90:12:b4:19:01> <56:c9:ce:90:12:b4:19:03>']
0
Lev Zakharov 13 अगस्त 2018, 06:47
पाइप का उपयोग करके ऐसा कैसे करें?
 – 
Ram Krishna
13 अगस्त 2018, 05:45
कृपया, इसे wiki पढ़ें। आप इस स्क्रिप्ट का परिणाम पाइपलाइन का उपयोग करके mytestfile.py को पास कर सकते हैं। मैं जल्द ही एक उदाहरण जोड़ूंगा।
 – 
Lev Zakharov
13 अगस्त 2018, 05:47
1
लेकिन ओपी एक पाइप नहीं चाहता है, वे चाहते हैं कि आउटपुट को कमांड लाइन तर्क के रूप में पारित किया जाए। (हालांकि, यह शायद गलत दिशा में है।) इसका समाधान xargs है, या आप दूसरे प्रोग्राम को पहले से सबप्रोसेस के रूप में चला सकते हैं।
 – 
tripleee
13 अगस्त 2018, 06:33
अभी भी शायद सही नहीं है, -0 को निकाल दें (या वास्तव में पहली स्क्रिप्ट से शून्य-पृथक आउटपुट प्रिंट करें)।
 – 
tripleee
13 अगस्त 2018, 06:45
धन्यवाद..क्या हम वैरिएबल में मान रखने के लिए Arrays या list जैसी किसी चीज़ का उपयोग कर सकते हैं?
 – 
Ram Krishna
13 अगस्त 2018, 08:17

क्या आप '56:' से शुरू होने वाली प्रत्येक पंक्ति के लिए अपना mytestfile.py एक बार चलाने का प्रयास कर रहे हैं, जैसे:

python mytestfile.py 56:c9:ce:90:4d:77:c6:03
python mytestfile.py 56:c9:ce:90:4d:77:c6:07
python mytestfile.py 56:c9:ce:90:12:b4:19:01

या क्या आप इसे केवल एक बार चलाना चाहते हैं, इसे फ़ाइल से सभी मानों को तर्क के रूप में देना, उदाहरण के लिए, आपके उदाहरण डेटा के साथ:

python mytestfile.py 56:c9:ce:90:4d:77:c6:03 56:c9:ce:90:4d:77:c6:07 56:c9:ce:90:12:b4:19:01

यदि यह पूर्व (एक रन प्रति मिलान रेखा) है, तो सबसे आसान तरीका है:

grep '^56' textfile | xargs python mytestfile.py

अन्यथा, आप यह कर सकते हैं:

python mytestfile.py `grep '^56' textfile`

ध्यान दें कि बाद वाला फ़ाइल में कोई स्थान नहीं होने पर निर्भर है - और यदि फ़ाइल बहुत बड़ी है तो यह थोड़ा खतरनाक है (आप कमांड-लाइन लंबाई सीमा में चला सकते हैं)।

0
Leo K 13 अगस्त 2018, 09:21
मैं अजगर mytestfile.py 56:c9:ce:90:4d:77:c6:03 56:c9:ce:90:4d:77:c6:07 56:c9:ce:90:12:b4 चलाना चाहता हूं: 19:01
 – 
Ram Krishna
13 अगस्त 2018, 09:36