Python脚本无法在linux中运行

Mah*_*aal -2 python linux

我有这个python脚本

#!/usr/bin/env python
import datetime, os
from time import gmtime, strftime

to_backup = "/home/vmware/tobackup"
var1 = datetime.datetime.now().strftime('%b-%d-%I%p')
for f in os.listdir(to_backup):
    if(os.path.isfile(f)):
        print f + " is a file"
    if(os.path.isdir(f)):
        print f + " is a directory"
Run Code Online (Sandbox Code Playgroud)

它给了我空的输出.我不知道问题出在哪里

输出为jimbob博士回答

total 36
-rwxrwxr-x 1 vmware vmware  440 May  5 07:41 back.py
-rwxrwxr-x 1 vmware vmware 2624 May  4 20:35 backup.sh
drwxr-xr-x 2 vmware vmware 4096 Jun 22  2010 Desktop
drwxrwxr-x 2 vmware vmware 4096 May  5 03:51 destination
drwxr-xr-x 2 root   root   4096 May  4 18:49 public_html
drwxrwxr-x 2 vmware vmware 4096 May  1 07:47 python
-rwxrwxr-x 1 vmware vmware  560 May  1 13:20 regex.py
drwxrwxrwx 7 vmware vmware 4096 May  5 03:50 tobackup
total 20
drwxrwxrwx 2 vmware vmware 4096 May  5 03:50 five
drwxrwxrwx 2 vmware vmware 4096 May  5 03:50 four
drwxrwxrwx 2 vmware vmware 4096 May  5 03:50 one
drwxrwxrwx 2 vmware vmware 4096 May  5 03:50 three
drwxrwxrwx 2 vmware vmware 4096 May  5 03:50 two
Run Code Online (Sandbox Code Playgroud)

dr *_*bob 5

好的,你有权限,但是当你列出文件时,你不在正确的目录中.list_dir给你的文件/目录列表,没有他们的路径,os.path.isfile('one')os.path.isdir('one')会检查当前目录的目录"一"是否存在(无论你从推出的脚本,除非你明确地改变了目录中os.chdir或包含的路径,例如,os.path.isdir('/home/vmware/tobackup/one').

#!/usr/bin/env python
import datetime, os
from time import gmtime, strftime
import subprocess

to_backup = "/home/vmware/tobackup"
var1 = datetime.datetime.now().strftime('%b-%d-%I%p')

os.chdir(to_backup)
# os.listdir(to_backup) = ['one', 'two', 'three', 'four', 'five']
for f in os.listdir(to_backup):
    if(os.path.isfile(f)):
        print f + " is a file"
    if(os.path.isdir(f)):
        print f + " is a directory"
Run Code Online (Sandbox Code Playgroud)

要么

to_backup = "/home/vmware/tobackup"
var1 = datetime.datetime.now().strftime('%b-%d-%I%p')
# os.listdir(to_backup) = ['one', 'two', 'three', 'four', 'five']
for f in os.listdir(to_backup):
    if(os.path.isfile(os.path.join(to_backup,f))):
        print f + " is a file"
    if(os.path.isdir(os.path.join(to_backup,f))):
        print f + " is a directory"
Run Code Online (Sandbox Code Playgroud)

或者walk(但实际上并没有穿过子区).

to_backup = "/home/vmware/tobackup"
var1 = datetime.datetime.now().strftime('%b-%d-%I%p')

root, dirs, files in os.walk(to_backup).next()
for file in files:
    print f + " is a file in " + root
for dir in dirs:
    print f + " is a directory"
Run Code Online (Sandbox Code Playgroud)

编辑:为了更清楚,原始脚本的错误是你有一个文件结构,如:

/home/user/bin/your_script.py
/home/vmware/tobackup/
/home/vmware/tobackup/one
/home/vmware/tobackup/two
...
Run Code Online (Sandbox Code Playgroud)

当您转到/ home/user/bin运行脚本(例如python your_script.py)时,os.listdir('/home/vmware/tobackup')会在/ home/vmware/tobackup中为您提供文件和目录名称列表['one','two', ...].但是,当您os.path.isfile('one')从目录/ home/user/bin执行操作时,检查是否/home/user/bin/one是文件,而不是/ home/vmware/tobackup/one是否为文件.既然/home/user/bin/one不存在,就没有输出.