代码之家  ›  专栏  ›  技术社区  ›  Lucas Lisboa

如何在Python中使用参数创建文件?

  •  0
  • Lucas Lisboa  · 技术社区  · 8 年前

    我当前正在创建文件传输客户端服务器。我需要做的是让客户端使用参数创建一个文件(如果我没有错,这与参数是一样的)。所以,我要找的是跑步

    python server.py

    然后

    python client.py file.txt
    

    这是服务器代码:

    # -*- coding: utf-8 -*-
    import socket
    from threading import Thread
    
    class threaded_server(Thread):
        def __init__(self,ip,port,sock):
            Thread.__init__(self)
            self.ip = ip
            self.port = port
            self.sock = sock
            print " Nova conexão de "+ip+":"+str(port)
    
        # rodando a thread, leitura da mensagem
        def run(self):
            arquivo = open('entrada.txt','rb')
            while True:
                temp = arquivo.read(msg)
                while (temp):
                    self.sock.send(temp)
                    temp = arquivo.read(msg)
                if not temp:
                    self.sock.close()
                    break
    
    host = socket.gethostname()
    port = 5001
    msg = 1024
    
    # não funcionou na declaração _def_init
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind((host, porta))
    threads = []
    
    # servidor fica aguardando novas conexoes
    while True:
        sock.listen(4)
        print "Aguardando..."
        (conn, (ip,port)) = sock.accept()
        print 'Conexão de: ', (ip,port)
        newthread = threaded_server(ip,port,conn)
        newthread.start()
        threads.append(newthread)
    
    for t in threads:
        t.join()
    

    这是客户端代码:

    # -*- coding: utf-8 -*-
    import socket
    
    host = socket.gethostname ()
    port = 5001
    msg = 2048
    
    tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    destino = (host, porta)
    tcp.connect(destino)
    with open('saida.txt', 'wb') as arquivo:
        print 'Arquivo aberto'
        while True:
            dados = tcp.recv(msg)
            if not dados:
                arquivo.close()
                break
            arquivo.write(dados)
    
    tcp.close()
    print('Fim da Conexão')
    

    我想要的是让客户端创建文件,并将其发送到服务器。

    很抱歉使用葡萄牙语编写代码。如果有人需要更多的澄清,请询问。

    1 回复  |  直到 8 年前
        1
  •  0
  •   mhawke    8 年前

    可以使用访问命令行参数 sys.argv ,这是传递给脚本的参数列表。下面是一个示例:

    import sys
    print(sys.argv)
    

    将此保存到 test.py 然后使用以下命令行执行此程序:

    # python test.py file.txt
    ['test.py', 'file.txt']
    

    第一个脚本参数是python脚本本身的名称。第二个是第一个论点。您可以在 client.py 设置输出文件名的脚本:

    import sys
    
    if len(sys.argv) < 2:
        print('Usage: {} output_filename'.format(sys.argv[0]), file=sys.stderr)
        sys.exit(1)
    
    output_filename = sys.argv[1]
    with open(output_filename, 'wb') as arquivo:
        ...
    

    长度 系统。argv 用于确保至少存在2个参数;第一个是脚本名,第二个是输出文件名。任何附加参数都将被忽略。