سؤال

والعمل على بعض الرموز وأنا نظرا للخطأ عند تشغيله من موجه الأوامر ...

NameError: name 'Popen' is not defined

ولكن لقد المستوردة على حد سواء import os وimport sys.

وهنا جزء من قانون

exepath = os.path.join(EXE File location is here)
exepath = '"' + os.path.normpath(exepath) + '"'
cmd = [exepath, '-el', str(el), '-n', str(z)]

print 'The python program is running this command:'
print cmd

process = Popen(cmd, stderr=STDOUT, stdout=PIPE)
outputstring = process.communicate()[0]

وأنا شيء مفقود الابتدائية؟ وأود أن لا أشك في ذلك. شكرا!

هل كانت مفيدة؟

المحلول

ويجب ان تفعل:

import subprocess
subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
# etc.

نصائح أخرى

ويعرف Popen في وحدة فرعي أو جانبي

import subprocess
...
subprocess.Popen(...)

وأو:

from subprocess import Popen
Popen(...)

وعند استيراد وحدة نمطية، وأعضاء وحدة لا تصبح جزءا من مساحة الاسم العالمي: لا يزال لديك بادئة لهم modulename.. لذلك، لديك لتقوله

import os
process = os.popen(command, mode, bufsize)

وبدلا من ذلك، يمكنك استخدام بناء الجملة from module import names لاستيراد أشياء في مساحة الاسم العالمي:

from os import popen    # Or, from os import * to import everything
process = popen(command, mode, bufsize)

وهذا يبدو وكأنه Popen من وحدة فرعي أو جانبي (الثعبان> = 2.4)

from subprocess import Popen

إذا يبدو الاستيراد الخاصة بك مثل هذا:

import os

وبعد ذلك تحتاج إلى مرجع الأمور المدرجة في نظام التشغيل مثل هذا:

os.popen()

إذا كنت لا تريد أن تفعل ذلك، يمكنك تغيير الاستيراد الخاص بك لتبدو مثل هذا:

from os import *

والتي لا ينصح لأنه يمكن أن يؤدي إلى الغموض مساحة الاسم (على الامور في التعليمات البرمجية يتعارض مع الأشياء المستوردة في مكان آخر) يمكنك أيضا أن مجرد القيام به:

from os import popen

وأيهما أكثر وضوحا وأسهل في القراءة من نظام التشغيل من استيراد *

ويجب أن تكون باستخدام os.popen () إذا كنت ببساطة استيراد نظام التشغيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top