python copy file in local network (linux -> linux) and output

后端 未结 2 853
鱼传尺愫
鱼传尺愫 2020-12-20 02:22

I\'m trying to write a script to copy files in my RaspberryPi, from my Desktop PC. Here is my code: (a part)

print \"start the copy\"   
path_pi = \'//192.16         


        
相关标签:
2条回答
  • 2020-12-20 02:59

    shutil.copy2() works with local files. 192.168.2.2:22 suggests that you want to copy files over ssh. You could mount the remote directory (RaspberryPi) onto a local directory on your desktop machine (sshfs) so that shutil.copy2() would work.

    If you want to see the output of a command then don't set stdout=PIPE (note: if you set stdout=PIPE then you should read from p.stdout otherwise the process may block forever):

    from subprocess import check_call
    
    check_call(['scp', file_pc, file_pi])
    

    scp will print to whatever places your parent Python script prints.

    To get the output as a string:

    from subprocess import check_output
    
    output = check_output(['scp', file_pc, file_pi])
    

    Though It looks like scp doesn't print anything by default if the output is redirected.

    You could use pexpect to make scp think that it runs in a terminal:

    import pipes
    import re
    import pexpect # $ pip install pexpect
    
    def progress(locals):
        # extract percents
        print(int(re.search(br'(\d+)%[^%]*$', locals['child'].after).group(1)))
    
    command = "scp %s %s" % tuple(map(pipes.quote, [file_pc, file_pi]))
    status = pexpect.run(command, events={r'\d+%': progress}, withexitstatus=1)[1]
    print("Exit status %d" % status)
    
    0 讨论(0)
  • 2020-12-20 03:07

    Do you have SSH enabled? Something like this could help you:

    import os
    os.system("scp FILE USER@SERVER:PATH")
    
    0 讨论(0)
提交回复
热议问题