Python 2.7:import模块和函数以及为新变量赋值变量

时间:2018-04-26 19:45:13

标签: python python-2.7 import module

我已经在我的python项目中遇到问题了几个小时。

情况如下:

我有一个脚本A.py和一个脚本B.py

**Script A.py:**
#in this script the function def main() is running 

def main():

       #some coding in here

       x=str(body)#then i assign the string of the variable body to a new variable x

#some other coding in here

if __name__=='__main__':

        main()

提示:这是一个伪代码来解释我的挣扎(作为独立模块的脚本工作正常)!

现在我有Script B.py(在同一个文件夹中)

**Script B.py** #in this script i try to run Script A.py and assign the value of variable x to a new variable in order to do furhter processing with it.

import A

A.main() # When importing the module and excuting its main() function by running B.py I see the values of variable x appearing on my screen

问题:如何将变量x now的值分配给新变量,以便我可以在B.py中进行进一步处理?这甚至可能吗? 调用A.py的main函数后原因没有处理其他操作。

请注意,我是一个相对较新的,通过几个模块重新编程。

我会很高兴得到任何帮助。

非常感谢您提前

亲切的问候

SLIN

好的,我尝试了你的方法,但仍然没有得到理想的结果。

A.py是AMQP订阅脚本(https://www.rabbitmq.com/tutorials/tutorial-one-python.html)(见下文):

import pika



   credentials = pika.PlainCredentials('admin', 'admin')
   connection = pika.BlockingConnection(pika.ConnectionParameters('Ipaddress',
                                          5672,
                                          '/',
                                          credentials))
   #connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
   channel = connection.channel()

   channel.exchange_declare(exchange='logs',
                               exchange_type='fanout')

   result = channel.queue_declare(exclusive=True)
   queue_name = result.method.queue

   channel.queue_bind(exchange='logs',
                         queue=queue_name)

   print(' [*] Waiting for logs. To exit press CTRL+C')

   def callback(ch, method, properties, body):

          x = str(body)
          print str(x)
   channel.basic_consume(callback,
                            queue=queue_name,
                            no_ack=True)



   channel.start_consuming()


if __name__ == '__main__':
       main()

B.py:

import pika
import A
A.main()

到目前为止,我得到的结果与上面的编码相同。 我想将x(在A运行时可以使用的值)分配给B.py中的新变量进行一些处理,然后使用A.py的对应脚本进行发布。

执行B.py时收到:

[*] Waiting for logs. To exit press CTRL+C
['20'] #this is the string of variable x from script A

现在我想将这个[' 20']分配给一个新的变量wihtin B.py ..但脚本B.py继续运行A.main()(这是合乎逻辑的,因为它是一个循环)。

感谢您的支持。

亲切的问候

3 个答案:

答案 0 :(得分:0)

您可以使用number, boolean语句将x的值返回给脚本B:

return

然后通过将其存储在变量return str(body)#then i assign the string of the variable body to a new variable x 中来获取脚本B中的该值。

答案 1 :(得分:0)

就像对待任何其他模块一样对待它。在脚本A中,创建一个名为main的函数。在其中,您必须有一个可以从其他脚本插入的变量,称之为正文。

脚本A:

def main(body):
    ...
    return x

接下来,使用import _.py作为_,像导入其他任何模型一样导入其他脚本。您可以像在其他脚本B中一样使用该函数。就好像您要导入对象A并调用其方法b。

脚本B:

import a.py as A

object = A.main(thing2string) # or object = A.main() if the script b has something to return

现在你拥有了在A中创建的对象,你可以在其中进行处理。例如,

processed = [object[i] for i in object]
# ... processing steps

我不知道您是否可以通过变更通知您。但是您使用计时器来检查值是否已更新,并使用if语句进行更新(如果已更新)。

要点:

您必须在脚本A中添加返回行。您必须在脚本b中设置一个等于它的变量。然后这个新变量变成b返回的任何东西。

答案 2 :(得分:0)

将A.作为A.py

中的全局变量
**Script A.py:**
#in this script the function def main() is running 

x = ''
def main():
   global x
   #some coding in here

   x=str(body)
   #then i assign the string of the variable body to a new variable x

   if __name__=='__main__':
      main()

现在您可以从B.py访问该x作为A.x