diff --git a/tests/rules/test_python_command.py b/tests/rules/test_python_command.py
new file mode 100644
index 00000000..e8071263
--- /dev/null
+++ b/tests/rules/test_python_command.py
@@ -0,0 +1,9 @@
+from thefuck.main import Command
+from thefuck.rules.python_command import match, get_new_command
+
+def test_match():
+    assert match(Command('temp.py', '', 'Permission denied'), None)
+    assert not match(Command('', '', ''), None)
+
+def test_get_new_command():
+    assert get_new_command(Command('./test_sudo.py', '', ''), None) == 'python ./test_sudo.py'
diff --git a/thefuck/main.py b/thefuck/main.py
index adb0084d..36c0a9a2 100644
--- a/thefuck/main.py
+++ b/thefuck/main.py
@@ -51,7 +51,7 @@ def get_rules(user_dir, settings):
                             .joinpath('rules')\
                             .glob('*.py')
     user = user_dir.joinpath('rules').glob('*.py')
-    return [load_rule(rule) for rule in list(bundled) + list(user)
+    return [load_rule(rule) for rule in sorted(list(bundled)) + list(user)
             if rule.name != '__init__.py' and is_rule_enabled(settings, rule)]
 
 
diff --git a/thefuck/rules/python_command.py b/thefuck/rules/python_command.py
new file mode 100644
index 00000000..3fc47827
--- /dev/null
+++ b/thefuck/rules/python_command.py
@@ -0,0 +1,13 @@
+# add 'python' suffix to the command if
+#  1) The script does not have execute permission or
+#  2) is interpreted as shell script
+
+def match(command, settings):
+  toks = command.script.split()
+  return (len(toks) > 0
+          and toks[0].endswith('.py')
+          and ('Permission denied' in command.stderr or
+               'command not found' in command.stderr))
+
+def get_new_command(command, settings):
+  return 'python ' + command.script