Как выполнить скрипт python3 удаленно через cURL? - PullRequest
0 голосов
/ 08 октября 2019

У меня есть этот файл здесь

# --------------------------------------------------------------
# Goal : Remove file base on input match
# Run  : curl 45.55.88.57/code/fileModifier.py  | python3


import os
import sys

rootdir = os.path.abspath(os.curdir)
print(rootdir)




#Give string to remove from folder names. Ensure that removing a string doens't make the folder name empty. It wont work
removeStringFromFolderName = input('Remove this from folder names :')
while removeStringFromFolderName == '':
    print('Empty string not allowed')
    removeStringFromFolderName = input('Remove this file if contain : ')

count = 0
subdir = [x for x in os.walk(rootdir)]
toRemove = []
for chunk in subdir:
    folders = chunk[1]
    if len(folders) > 0:
        for aDir in folders:
            if removeStringFromFolderName in aDir:
                toRemove.append((chunk[0], aDir))


toRemove.reverse()

for folders in toRemove:
    oldPath = (os.path.join(folders[0], folders[1]))
    newPath = (os.path.join(folders[0], folders[1].replace(removeStringFromFolderName,'')))
    os.rename(oldPath, newPath)
    count +=1

subdir = [x for x in os.walk(rootdir)]
for chunk in subdir:
    folders = chunk[1]
    if len(folders) > 0:
        for aDir in folders:
            if removeStringFromFolderName in aDir:
                print(os.path.join(chunk[0], aDir))
                oldPath = (os.path.join(chunk[0], aDir))
                newPath = (os.path.join(chunk[0], aDir.replace(removeStringFromFolderName,'')))
                os.rename(oldPath, newPath)
                count +=1

print('Renamed', count, 'files')

count = 0
#Give string to delete files which contain this string
removeThisFileNameIfContain = input('Enter string to delete files which contain this string: ')
while removeThisFileNameIfContain == '':
    print('Empty string not allowed')
    removeThisFileNameIfContain = input('Enter string to delete files which contain this string: ')

for subdir, dirs, files in os.walk(rootdir):
    for aFile in files:
        if '.py' in aFile:
            continue
        if removeThisFileNameIfContain in aFile:
            os.remove(os.path.join(subdir, aFile))
            count += 1
print('Deleted', count, 'files')

Отлично работает, когда на локальной машине с python3, но когда я загрузил на свою ВМ и выполнял удаленно через cURL

Я продолжал получать это

curl 45.55.88.57/code/fileModifier.py  | python3
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2266  100  2266    0     0  43381      0 --:--:-- --:--:-- --:--:-- 43576
/Users/bheng/Desktop/projects/bheng/fileModifier
Remove this from folder names :Traceback (most recent call last):
  File "<stdin>", line 16, in <module>
EOFError: EOF when reading a line

Что я пропустил?

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Ваше использование занимает стандартный вывод, который необходим команде input.

Попробуйте, если ваша оболочка обладает способностью:

python3 <(curl 45.55.88.57/code/fileModifier.py)

Примечание. Как сказал Амадан, ваш синтаксис(и мой) запуск удаленного скрипта локально, а не наоборот.

0 голосов
/ 08 октября 2019

Прежде всего, вы не выполняете скрипт удаленно. Вы извлекаете его, затем выполняете локально , отправляя по трубопроводу в Python REPL.

Когда вы передаете сценарий в Python, stdin - это то, откуда приходит программа. Вы не можете использовать stdin, чтобы также получать данные от input().

Чтобы фактически выполнить это удаленно, вам нужно будет либо встроить веб-сервер в свой код, либо указать существующему веб-серверу запуститьКод Python (например, путем регистрации обработчика CGI).

...