我已经在我的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()(这是合乎逻辑的,因为它是一个循环)。
感谢您的支持。
亲切的问候
答案 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的函数。在其中,您必须有一个可以从其他脚本插入的变量,称之为正文。
def main(body):
...
return x
接下来,使用import _.py作为_,像导入其他任何模型一样导入其他脚本。您可以像在其他脚本B中一样使用该函数。就好像您要导入对象A并调用其方法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