我正在为学校做一个项目。我有两个脚本。一个接受目标ip发送字符串,另一个接受来自该ip的数据。一个脚本在特定时间打开另一个脚本,以使其更加用户友好。但是,它不是打开正确的文件,而是打开发送文件,该文件带有os.startfile()。以下是脚本:
#!python3
import socket
import sys
import os
print ("MAGENTA Chat Host v1 - send")
target = input("Target IP:")
UDP_IP = target
os.startfile("ChatRcv.py")
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print ("Socket successfully created")
except socket.error as err:
print ("Socket creation failed with error %s" %(err))
while True:
message = input ("Message:")
if message == "exit":
s.close()
sys.exit()
else:
s.sendto(bytes(message, "utf-8"),(UDP_IP,5000))
下一步
#!python3
import socket
import sys
from ChatSend import UDP_IP
print ("MAGENTA Chat Host v1 - receive")
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print ("Socket successfully created")
except socket.error as err:
print ("Socket creation failed with error %s" %(err))
s.bind((UDP_IP,5000))
while True:
data, addr = s.recvfrom(1024)
print ("Received message:", data)
我做错了什么?请帮忙!
编辑 - 这与导入行有关,当我发表评论时它工作得很好。 Getcwd()给出了正确的结果。使用Python 3.5.2和Windows 32bit。需要帮助!
答案 0 :(得分:0)
ChatSend.py
将运行整个脚本ChatRcv
(包括启动另一个UDP_IP
进程),运行完成后,ChatRcv.py
将可用于#!python3
# Code that will always run (e.g., during import)
if __name__ == "__main__":
# Code that will only run when you call the script directly.
else:
# Code that will only run when you import.
程序。
以下内容可让您控制直接启动程序时运行的代码类型与从中导入时运行的代码:
UDP_IP
如果你想要的是将ChatSend.py
的值从ChatRcv.py
传递给ChatSend.py
,则无法通过导入变量来实现,因为你需要这样做从ChatRcv.py
的新实例导入它,而不是从原始实例导入。{相反,您应该将它作为命令行参数传递给# ChatSend.py
...
import subprocess
UDP_IP = target
subprocess.Popen(["ChatRcv.py", UDP_IP])
# ChatRcv.py
# Instead of from ChatSend import UDP_IP
if len(sys.argv) > 2:
UDP_IP = sys.argv[1]
else:
print("You need to pass UDP_IP as an argument")
sys.exit(-1)
:
public void SomeMethod(){
_authRepository.DoSomething();
_subscriptionsRepository.DoSomething(); <-- error here
}