如何通过 cURL 远程执行 python3 脚本?

How execute python3 script remotely via cURL?

我这里有这个文件

# --------------------------------------------------------------
# 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 的本地机器上工作完美,但当我上传到我的 VM 并通过 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

我错过了什么?

首先,您不是在远程执行脚本。您正在获取它,然后通过管道进入 Python REPL 本地 执行它。

当您将脚本传输到 Python 时,stdin 是程序的来源。您不能使用 stdin 也从 input().

获取数据

要真正远程执行它,您需要在您的代码中构建网络服务器,或者告诉现有网络服务器 运行 您的 Python 代码(例如通过注册 CGI处理程序)。

您的使用正在占用 input 命令需要的标准输出。

如果您的 shell 有以下能力,请试试这个:

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

注意:正如 Amadan 所说,您的语法(和我的)运行 是本地的远程脚本,反之亦然。