मान लीजिए मेरे पास दो स्क्रिप्ट हैं:

#script1.py
import subprocess
numbers = ['1', '2', '3']

for number in numbers:
    p = subprocess.Popen('script2.py', number)

अन्य स्क्रिप्ट:

#script2.py
import subprocess
from script1 import *

number = sys.argv[1]

print(number)

त्रुटि संदेश (जब मैं script1.py चलाता हूं):

Traceback (most recent call last):
  File "script1.py", line 6, in <module>
p = subprocess.Popen('script2.py', number)
  File "C:\Users\hacke\AppData\Local\Programs\Python\Python38- 
32\lib\subprocess.py", line 753, in __init__
    raise TypeError("bufsize must be an integer")
TypeError: bufsize must be an integer

मैं चाहता हूं कि यह प्रोग्राम 3 सबप्रोसेसेज खोले जहां 1 सबप्रोसेस नंबर = '1', दूसरा सबप्रोसेस नंबर = '2', और दूसरा नंबर = '3'। मैंने पाइथन दस्तावेज और स्टैक ओवरफ्लो को देखा है और मुझे अभी तक वह नहीं मिला है जो मैं ढूंढ रहा हूं।

नोट: मैं इस कोड का उपयोग एक बड़े प्रोग्राम के लिए कर रहा हूं जो टिंकर जीयूआई और सबप्रोसेस का उपयोग करता है। कोड की पॉप लाइन, निष्पादित होने पर, अन्य स्क्रिप्ट चलाने के बजाय प्रत्येक उपप्रोसेस के लिए एक और टिंकर विंडो खोलती है।

सभी मदद की सराहना की जाती है और मैं उस सभी उत्तर को धन्यवाद देता हूं।

अद्यतन करें: जब मैं स्क्रिप्ट को इस प्रकार निष्पादित करता हूं:

numbers = ['1', '2', '3']

for number in numbers:
    p = subprocess.Popen(['python', 'script2.py', number])

यह वेरिएबल्स को script2.py पर सही ढंग से पास करता है लेकिन स्क्रिप्ट को असीम रूप से निष्पादित करेगा जिसके परिणामस्वरूप यह आउटपुट के रूप में होगा:

1
2
3
1
2
3(continuing the pattern)

यह सुनिश्चित नहीं है कि इसे कैसे ठीक किया जाए। यह मेरे पीसी को क्रैश कर देता है।

0
NarrowGlint 31 मार्च 2020, 22:15

1 उत्तर

सबसे बढ़िया उत्तर

दस्तावेज़ के अनुसार, Popen() को bufsize कहा जाता है। यह आपकी स्क्रिप्ट का पैरामीटर नहीं है जिसे आप चला रहे हैं। इसके बजाय, आप पहले पैरामीटर की सूची के रूप में args पास करते हैं:

number = '1'
p = subprocess.Popen(['python', 'script2.py', number])

ध्यान दें कि आपको स्ट्रिंग 'python' को भी पास करना होगा क्योंकि यह वह कमांड है जो आपकी पायथन स्क्रिप्ट को चलाएगी।

0
Code-Apprentice 31 मार्च 2020, 19:30