簡體   English   中英

使用子進程調用帶有參數的python腳本

[英]Calling a python script with arguments using subprocess

我有一個python腳本,它從另一個目錄調用另一個python腳本。 為此,我使用了subprocess.Popen

import os
import subprocess

arg_list = [project, profile, reader, file, str(loop)]

如果未隱式轉換所有args均為字符串

f = open(project_path + '/log.txt','w')
proc = subprocess.Popen([sys.executable, python_script] + arg_list, stdin=subprocess.PIPE, stdout=f, stderr=f)
streamdata = proc.communicate()[0]
retCode = proc.returncode
f.close()

由於日志文件的緣故,這部分工作良好,因為我可以看到被調用腳本上發生的錯誤。 這是稱為的python腳本:

import time
import csv
import os

class loading(object):

    def __init__(self, project=None, profile=None, reader=None, file=None, loop=None):
        self.project=project
        self.profile=profile
        self.reader=reader
        self.file=file
        self.loop=loop

    def csv_generation(self):       
        f=open(self.file,'a')
        try:
            writer=csv.writer(f)
            if self.loop==True:
                writer.writerow((self.project,self.profile,self.reader))
            else:
                raise('File already completed')
        finally:
            file.close()
def main():
    p = loading(project, profile, reader, file, loop)
    p.csv_generation()

if __name__ == "__main__":
    main()

當我啟動subprocess.Popen時,調用腳本出現錯誤,告訴我'project' is not defined 看起來Popen方法沒有將參數傳遞給該腳本。 我想我做錯了什么,有人有主意嗎?

當您將參數傳遞給新流程時,它們是按位置傳遞的,父流程的名稱將無法保存,僅會保留值。 您需要添加:

import sys
def main():
    if len(sys.argv) == 6:
        project, profile, reader, file, loop = sys.argv[1:]    
    else:
        raise ValueError,("incorrect number of arguments")

    p = loading(project, profile, reader, file, loop)
    p.csv_generation()

我們正在分配前測試sys.argv的長度(第一個元素是程序的名稱)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM