سؤال

كيف يمكنني تشغيل هذا الأمر مع العملية الفرعية؟

حاولت:

proc = subprocess.Popen(
    '''ECHO bosco|"C:\Program Files\GNU\GnuPG\gpg.exe" --batch --passphrase-fd 0 --output "c:\docume~1\usi\locals~1\temp\tmptlbxka.txt" --decrypt "test.txt.gpg"''',
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
   stderr=subprocess.STDOUT,
)
stdout_value, stderr_value = proc.communicate()

ولكن حصلت على:

Traceback (most recent call last):
...
  File "C:\Python24\lib\subprocess.py", line 542, in __init__
    errread, errwrite)
  File "C:\Python24\lib\subprocess.py", line 706, in _execute_child
    startupinfo)
WindowsError: [Errno 2] The system cannot find the file specified

الأشياء التي لاحظتها:

  1. تشغيل الأمر على وحدة التحكم Windows يعمل بشكل جيد.
  2. إذا قمت بإزالة Echo Bosco | جزء ، فهو يعمل بشكل جيد المكالمة البوبن أعلاه.لذلك أعتقد أن هذه المشكلة مرتبطة بـ Echo أو |.
هل كانت مفيدة؟

المحلول

أولاً وقبل كل شيء، أنت لا تحتاج فعليًا إلى أنبوب؛أنت فقط ترسل المدخلات.يمكنك استخدام عملية فرعية. التواصل من أجل هذا.

ثانيًا، لا تحدد الأمر كسلسلة؛هذا أمر فوضوي بمجرد تضمين أسماء الملفات ذات المسافات.

ثالثًا، إذا كنت تريد حقًا تنفيذ أمر عبر الأنابيب، فما عليك سوى الاتصال بـ Shell.على نظام التشغيل Windows، أعتقد أنه كذلك cmd /c program name arguments | further stuff.

وأخيرًا، يمكن أن تكون الخطوط المائلة الخلفية المفردة خطيرة: "\p" يكون '\\p', ، لكن '\n' هو خط جديد.يستخدم نظام التشغيل.path.join() أو os.sep أو، إذا تم تحديده خارج بايثون، مجرد شرطة مائلة للأمام.

proc = subprocess.Popen(
    ['C:/Program Files/GNU/GnuPG/gpg.exe',
    '--batch', '--passphrase-fd', '0',
    '--output ', 'c:/docume~1/usi/locals~1/temp/tmptlbxka.txt',
    '--decrypt', 'test.txt.gpg',],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
   stderr=subprocess.STDOUT,
)
stdout_value, stderr_value = proc.communicate('bosco')

نصائح أخرى

لقد كنت على حق، مكتب المساعدات الإنسانية (ECHO) هو المشكلة.بدون الخيار shell=True، لا يمكن العثور على أمر ECHO.

فشل هذا بسبب الخطأ الذي رأيته:

subprocess.call(["ECHO", "Ni"])

يمر هذا:يطبع Ni و 0

subprocess.call(["ECHO", "Ni"], shell=True)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top