2015-01-12 2 views
1

В python кажется достаточно простым, чтобы добавить данные в существующий файл (локально), хотя и не так просто сделать это удаленно (по крайней мере, что я нашел). Есть ли какой-то прямой метод для этого?Удаленный файл Python

Я попытался с помощью:

import subprocess 

cmd = ['ssh', '[email protected]', 
     'cat - > /path/to/file/append.txt'] 

p = subprocess.Popen(cmd, stdin=subprocess.PIPE) 

inmem_data = 'foobar\n' 

for chunk_ix in range(0, len(inmem_data), 1024): 
    chunk = inmem_data[chunk_ix:chunk_ix + 1024] 
    p.stdin.write(chunk) 

Но, возможно, это не так, как это сделать; поэтому я попытался разместить запрос:

import urllib 
import urllib2 

query_args = { 'q':'query string', 'foo':'bar' } 

request = urllib2.Request('http://example.com:8080/') 
print 'Request method before data:', request.get_method() 

request.add_data(urllib.urlencode(query_args)) 
print 'Request method after data :', request.get_method() 
request.add_header('User-agent', 'PyMOTW (http://example.com/)') 

print 
print 'OUTGOING DATA:' 
print request.get_data() 

print 
print 'SERVER RESPONSE:' 
print urllib2.urlopen(request).read() 

Но я получаю connection refused, так что я, очевидно, потребуется некоторый тип формы обработчик, который, к сожалению, у меня нет знаний о. Рекомендуемый способ сделать это? Благодарю.

+0

Вы пытаетесь написать файл удаленно? SSH или HTTP? Если у вас есть веб-сервер с другой стороны, вы можете отправить HTTP-запрос соответствующим образом. Вы также должны использовать SSH, если он настроен. Это зависит от того, что слушает. –

+0

@ RyanO'Donnell, ну это может быть на самом деле. Все, что я действительно хочу сделать, это взять переменную, скажем, '$ var =" 1234 "и добавить значение в существующий файл (удаленно), который содержит другие значения. –

ответ

2

Если я правильно понимаю, вы пытаетесь добавить удаленный файл в локальный файл ...

Я бы рекомендовал использовать ткань ... http://www.fabfile.org/

Я попытался это с текстовыми файлами и он отлично работает.

Не забудьте установить ткань перед запуском сценария:

pip install fabric 

Append удаленный файл в локальный файл (я думаю, что это само за себя):

from fabric.api import (cd, env) 
from fabric.operations import get 

env.host_string = "127.0.0.1:2222" 
env.user = "jfroco" 
env.password = "********" 

remote_path = "/home/jfroco/development/fabric1" 
remote_file = "test.txt" 
local_file = "local.txt" 

lf = open(local_file, "a") 

with cd(remote_path): 
    get(remote_file, lf) 

lf.close() 

запустить его как любой файл питона (нет необходимости использовать «ВСБ» приложение)

Надеется, что это помогает

EDIT: Новый сценарий, написать переменную в конце удаленного файла:

Опять же, это супер просто, используя ткань

from fabric.api import (cd, env, run) 
from time import time 

env.host_string = "127.0.0.1:2222" 
env.user = "jfroco" 
env.password = "*********" 

remote_path = "/home/jfroco/development/fabric1" 
remote_file = "test.txt" 

variable = "My time is %s" % time() 

with cd(remote_path): 
    run("echo '%s' >> %s" % (variable, remote_file)) 

В примере я использую time.time(), но может быть чем угодно.

+0

Я хочу взять переменную (созданную из локального скрипта) и отправить ее для добавления других значений в удаленный файл. Будет ли это работать, хотя с использованием только переменной вместо добавления в файл другого файла? Благодарю. –

+0

Здравствуйте, я обновил свой ответ на основе вашего комментария. Надеюсь это поможет. –

+0

Эй, это круто! Огромное спасибо. –

Смежные вопросы