2011-01-25 8 views
18

पर वेरिएबल्स पास करना मैं अपने सबप्रोसेस कमांड पर raw_input से अपने चर को पास करने का प्रयास कर रहा हूं। मैं पाइथन के लिए नया हूँ। किसी भी मदद की सराहना की जाएगी।एक सबप्रोसेस कॉल

#!/usr/bin/python 

import subprocess 

print "\nWhat user name" 
username = str(raw_input('username: ')) 
print "\nWhat is the user id" 
userid = int(raw_input('Enter user id: ')) 
print "\nWhat is the user\'s primary group?" 
primarygroup = int(raw_input('Enter group: ')) 
print "\nWhat is the user\'s secondary group?" 
secondarygroup = int(raw_input('Enter group: ')) 

subprocess.call(['useradd' '-m' '-g' _primarygroup '-G' _secondarygroup '-u' _userid _username]) 

print"\nThe user has been added" 
+4

आपको क्या समस्या है? कृपया विशिष्ट रहें। –

+0

"विशिष्ट होना" है - उम्मीद है - n00bz के लिए उनकी समस्या के बारे में थोड़ा और स्पष्ट रूप से सोचने का एक तरीका है। –

+1

वास्तव में पुराना लेकिन मैं ध्यान दूंगा कि, उदाहरण के लिए, प्राथमिक समूह को 'प्राथमिक समूह' में पढ़ा गया था लेकिन फिर '_primarygroup' के माध्यम से उपयोग करने का प्रयास किया गया। – altendky

उत्तर

19

अल्पविरामों से मूल्यों को अलग करने का प्रयास करें:

subprocess.call(['useradd', '-m', '-g', _primarygroup, '-G', _secondarygroup, '-u', _userid, _username]) 

http://docs.python.org/library/subprocess.html#subprocess.call देखें - यह एक सरणी जहां पहला तर्क कार्यक्रम है और अन्य सभी तर्क कार्यक्रम के लिए तर्क के रूप में पारित कर रहे हैं लगता है।

एक शून्य रिटर्न कोड के लिए फ़ंक्शन का रिटर्न वैल्यू भी देखना न भूलें जिसका अर्थ है "सफलता" जब तक कि उपयोगकर्ता सफलतापूर्वक नहीं जोड़ा गया हो या नहीं, आपकी स्क्रिप्ट के लिए कोई फर्क नहीं पड़ता।

+0

मैं raw_input से दिए गए मान को मेरे सबप्रोसेस कॉल पर पास करने का प्रयास कर रहा हूं। – rsouthard

3

अपनी सूची आइटम के बीच अल्पविराम जोड़ने के लिए प्रयास करें:

subprocess.call(['useradd', '-m', '-g', _primarygroup, '-G', _secondarygroup, \ 
       '-u' ,_userid, _username]) 

subprocess.callsubprocess.Popen रूप में एक ही तथ्य होते हैं:

args एक स्ट्रिंग, या प्रोग्राम तर्कों की अनुक्रम होना चाहिए।


संपादित

एक बार आप आप कर सकते थे एक सूची समझ में तार में अपने सभी तर्क बदलने के लिए:

args = ['useradd', '-m', '-g', _primarygroup, '-G', _secondarygroup, \ 
     '-u' ,_userid, _username] 
str_args = [ str(x) for x in args ] 
+0

दुर्भाग्य से _primarygroup, _secondarygroup, और _username के मानों को पूर्णांक होना चाहिए। आईई: useradd -g 501 -503 -u 501 – rsouthard

+0

शायद आपकी समस्या खोल के साथ है। कार्यक्रमों और स्क्रिप्ट के लिए तर्क केवल तारों के रूप में पारित किए जा सकते हैं (उदाहरण के लिए पूर्णांक 501 के बजाय स्ट्रिंग '501' पारित किया जाता है)। इन स्ट्रिंग्स को सही प्रारूप में पार्स करने के लिए यह कहा जाता है। – Dunes

+0

आप 'तर्क' पर जाने से पहले अपने तर्कों को तारों में बदल सकते हैं; मेरा संपादन देखें। – miku

0
subprocess.call(['useradd', '-m','-g', _primarygroup, '-G', _secondarygroup, '-u', _userid, _username]) 

पास एक list करने के लिए subprocess.call

0

आप पहले तर्क स्ट्रिंग बना सकते हैं और फिर इस चर को subprocess.call पर पिछले कर सकते हैं। उदाहरण के लिए:

projects_csv_fn = 'projects_csv_2.csv' 
prjects_json_fn = 'projects.json' 

args ='python json_to_csv.py id ' + prjects_json_fn + ' ' + projects_csv_fn 

subprocess.call(args, shell=True) 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^