从一个python文件中获取输入并将其用于另一个python文件

时间:2015-07-12 22:48:04

标签: python

假设我有一个Zip文件,而test1.py正在从用户那里获取Zip文件的输入。

现在,test2.py打印Zip文件的内容。

我想从test1.py获取输入Zip文件以进行test2.py的操作。

因此,每当我运行test1.py时,都应该询问Zip文件的名称并将其转发到test2.py并显示test2.py的输出。

我想这样做:

test1.py:

import zipfile
import os

inputzip = input("Enter the Zip File:")
file = zipfile.ZipFile(inputzip, "r")
os.system("py test2.py")

test2.py:

import zipfile
import os

print ("The list of files in the zip : ")

for name in file.namelist():
   print (name)

但是每当我要运行test1.py时,它总是显示,

Enter the zip file:

test2.py没有执行。 我正在使用python 3.x

1 个答案:

答案 0 :(得分:2)

评论者是对的,但听起来你还是想知道。 @martineau已经强调了这个问题。发生的事情如下:

  1. test1.py在其自己的进程中执行并打开zip文件。
  2. test1.py要求操作系统启动test2.py
  3. test2.py在自己​​的进程中执行,并且没有test1.py的子进程中存在的zip文件的概念
  4. 因为他们彼此不了解,所以你想要的方式(即使用os.system())的最简单的选项是从test1传递信息。以字符串的形式py到test2.py.一种方法是:

    <强> test1.py

    import zipfile
    import os
    
    inputzip = input("Enter the Zip File:")
    files = zipfile.ZipFile(inputzip, "r")
    name_list = (" ".join([i for i in files.namelist()]))
    os.system("python3 test2.py {0}".format(name_list))
    

    <强> test2.py

    import zipfile
    import sys
    
    print ("The list of files in the zip : ")
    
    for name in sys.argv[1:]:
       print (name)
    

    <强>输出

    Enter the Zip File:test.zip
    The list of files in the zip : 
    test
    txt1
    txt2
    

    最后这非常混乱,正如@joelgoldstick已经指出的那样,你应该将方法从test2.py导入test1.py。例如:

    <强> test2.py

    def test2_method(zipfile):
      print ("The list of files in the zip : ")
    
      for name in zipfile.namelist():
         print (name)
    

    <强> test1.py

    import zipfile
    
    from test2 import test2_method
    
    inputzip = input("Enter the Zip File:")
    files = zipfile.ZipFile(inputzip, "r")
    
    test2_method(files)
    

    <强>输出

    Enter the Zip File:test.zip
    The list of files in the zip : 
    test
    txt1
    txt2
    

    我目前想知道让两个进程共享内存并且能够将打开的zip文件对象的内存引用传递给另一个进程是多么容易。不知道这是否可能&gt; _&lt;。任何可以启发的人都会很酷。